python对应的岗位_隐式相对导入如何在Python中工作?

包是具有__init__.py文件的目录,是,并且在模块搜索路径上找到时作为模块加载.因此,如果父目录位于模块搜索路径上,则pkg只是一个可以导入并视为包的包.

但是通过将pkg / core / main.py文件作为脚本运行,Python将pkg / core目录添加到模块搜索路径,而不是pkg的父目录.您现在在模块搜索路径上有一个__init__.py文件,但这不是定义包的内容.您只有一个__main__模块,与其他任何东西都没有包关系,您不能依赖隐式相对导入.

你有三个选择:

>不要将包内的文件作为脚本运行.将一个脚本文件放在包外面,然后根据需要导入包.您可以将它放在pkg目录旁边,或者确保首先将pkg目录安装到模块搜索路径上已有的目录中,或者让脚本计算添加到sys.path的正确路径.

>使用-m command line switch运行模块,就像它是一个脚本一样.如果使用python -m pkg.core,Python将查找__main__.py文件并将其作为脚本运行. -m开关将当前工作目录添加到模块搜索路径中,因此当您在正确的工作目录中时,可以使用该命令,一切都可以正常工作.或者将您的软件包安装在模块搜索路径上已有的目录中.

>让您的脚本将正确的目录添加到模块搜索路径(基于os.path.absolute(__ file__)以获取当前文件的路径).考虑到您的脚本始终命名为__main__,导入pkg.core.main将添加第二个独立的模块对象;你有两个独立的命名空间.

我也强烈反对使用隐式相对导入.您可以通过添加具有相同名称的嵌套包或模块轻松地屏蔽顶级模块和包.如果您尝试在pkg包中使用导入时间,则会在标准库时间模块之前找到pkg / time.py.相反,使用显式相对模块引用的Python 3模型;从__future__ import absolute_import添加到您的所有文件,然后使用from. import< name>明确指出从哪里导入模块.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值