首页 / PYTHON / 理解Python中的一系列进口
理解Python中的一系列进口
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了理解Python中的一系列进口,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2006字,纯文字阅读大概需要3分钟。
内容图文
![理解Python中的一系列进口](/upload/InfoBanner/zyjiaocheng/760/6acd2f27d74c49aa856b6fe03ce0769d.jpg)
我知道有几个类似的问题,但我很难理解我得到的错误,浏览文档和类似的问题还没有帮助.如果有的话,类似的问题让我觉得我正在做的是对的.
我有以下文件:
SRC / main.py
from pack import pack
if __name__ == '__main__':
pack.exec("Hello Universe!")
SRC /包/ pack.py
import util
def exec(text):
util.write(text)
if __name__ == '__main__':
exec("Hello World!")
SRC /包/ util.py
def write(text):
print(text)
* SRC /包/ _init_.py *
EMPTY FILE
当我从src / pack目录运行python pack.py时,它可以工作(打印“Hello World!”).但是当我从src目录运行python main.py时,我得到以下异常:
Traceback (most recent call last):
File ".../src/main.py", line 1, in <module>
from pack import pack
File ".../src/pack/pack.py", line 1, in <module>
import util
ImportError: No module named util
如果我将pack.py中的导入行更改为.按照建议导入util,实际上是相反的问题. main.py成功运行,但现在pack.py失败,提升:
Traceback (most recent call last):
File ".../src/pack/pack.py", line 1, in <module>
from . import util
ValueError: Attempted relative import in non-package
我原以为导入是相对于当前位置的,因此你应该能够构建这样的导入链.对我来说,模块应该根据程序的起始位置以不同方式导入兄弟文件,这似乎很奇怪.
有人可以解释为什么这种错误以一种方式而不是另一种方式发生,并且如果有某种方式允许这种文件结构运行我是否想从main.py或pack.py运行?
解决方法:
在这两种情况下,您都无法进行导入工作.这是因为在一种情况下,您运行pack.py作为主文件,而在另一种情况下,您将其作为包的一部分运行.
当您将其作为独立脚本python pack.py运行时,“pack”目录将添加到PYTHONPATH,这意味着您可以导入其中的任何模块.因此,import util将起作用.
运行python main.py时,将src目录添加到PYTHONPATH.这意味着src中的任何模块或包(例如pack目录)现在都可以导入.因此从包导入包.但是,要访问util.py,您现在需要从pack import util执行.你也可以做.正如您所注意到的,从pack.py中导入util.
但你不可能同时做到这两点. src /是主目录还是src / pack.
显而易见但错误的解决方案是让main.py将src / pack目录添加到PYTHONPATH.这将有效,但这不是一个好主意.这样做的正确方法是下定决心. src / pack是一个应该通过import pack导入的模块,还是只是一个包含一堆Python脚本的文件夹?决定!
内容总结
以上是互联网集市为您收集整理的理解Python中的一系列进口全部内容,希望文章能够帮你解决理解Python中的一系列进口所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。