Python入门-Python中的包,impot用法 import解释 环境变量

首先看

模块和库

set PYTHONPATH=c:\myproject;c:\myproject\mylib是在命令行输入。 ide 怎么设置呢

import xxx

for xx import xx都是绝对导入。

都是根据sys.path去找。

然后看 ,对于按照第一篇博客讲的,对于下面这一个博客,还是会不明白,不要紧先大体看一遍

 Python中import的用法总结_import在python中的用法-CSDN博客

应该是按照第一篇博

对于这个错误

main.py运行导入bb时,bb中 import cc是在运行脚本(main.py)所在的目录找有没有cc,在sys.path列出的目录下找有没有cc(不会在拼接目录,因为不是fromxximportcc,),当然找不到。

为什么 bb.py 中的from . import cc 可以找到 。main.py在Pythonprojectt目录 此时.不应该是Pythonproject吗 ?

 在 bb.py 中,from . import cc 的 “.” 表示的是 当前模块的包,也就是 branch,而不是根据运行的入口文件(main.py)来决定的

从当前模块所在的包导入cc

 那为什么 “.” 是相对于 branch,不是运行的入口文件的目录

这是 Python 的导入机制中的一个关键点:

  • Python 中的每个模块都有一个特殊变量 __package__

  • 当你运行 main.py,Python 会导入 branch.bb,此时 bb.py__package__ = 'a'

  • 所以 from . import cc 会被理解为:from branch import cc

解释

 不能直接运行含相对导入的模块!

通过 -m 参数 执行某个模块,那么 当前工作目录 会被加到 sys.path 中作为模块搜索路径。

-m 后面要的是“模块名”,不是文件路径,也不能用相对名(如 .\main.py

  • -m → 告诉解释器“用 模块/包名 的形式运行”

  • Python 把当前目录(D:\zhouj\Documents\Pythontest)加进 sys.path[0]

  • 在这个目录下找到 Project1 文件夹,把它当作一个包

  • 在这个包里找到 main.py 模块

  • 执行 main.py 文件里的代码

(.venv) PS D:\zhouj\Documents\Pythontest\Project1> python -m main

  • 这时候 sys.path[0] = 当前目录Project1

  • Python 在这个路径里找到 main.py

  • 它认为正在运行的模块名是 main(顶层模块)。

  • 所以 __package__ = "main" 这个包没有branch包

cd Pythontest python -m Project1.main
  • 这时候 sys.path[0] =当前目录 Pythontest

  • Python 在这里找到 Project1 目录,把它当成一个包。

  • 它认为正在运行的模块名是 Project1.main

  • 所以 __package__ = "Project1"

  • 当执行到 from .branch import cc

    • . 当前模块所在的包Project1

    • Python 会去 Project1/branchcc

 

Pycharm 如何寻找导入的模块?

使用IDE - 白月黑羽

在pycharm 可以运行 但是在命令行不可以运行 因为pycharmsys.path有项目根目录。 

pycharm add content roots to PYTHONPATH

 Add source roots to PYTHONPATH

#Python中的包
#包(python package)是一个分层次的目录(directory)结构,它将一组功能相近的模块组织在一个目录下
#作用:1.代码规范,2.避免模块名称冲突
#包与目录的区别
#包含__init__.py文件的目录称为包
#目录通常不包含__init__.py文件
#包的导入
#import 包名.模块名
#在demo中导入包:demo2中的模块:modelA
import demo2.modelA
print(demo2.modelA.a)
import demo2.modelA as s#导入包:demo2中的模块:modelA起别名为s
#s是demo2.modelA的别名
print(s.a)
###############################################
'''导入带有包的模块时的注意事项
使用import方式进行导入时,只能根报名或模块名
import clc
import demo2

使用from impor导入时可以导入包,模块,函数,变量等
from demo2 import modelA导入包demo2中的模块a
from demo2.modelA import a导入包demo2中的模块modelA的a

'''

环境变量

环境变量 - 白月黑羽

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值