[英]Python can't consistently find a module while the parent directory is in sys.path
[英]How can I load the parent directory of a script as a module, without adding all of the siblings of that directory's parent directory to my sys.path?
我希望对这个问题有一个简单的答案,而我只是忽略了这个问题。
设置如下:
foo/
__init__.py
run.py
run.py的内容:
import foo
运行脚本:
$ python run.py
Traceback (most recent call last):
File "run.py", line 1, in <module>
import foo
ImportError: No module named foo
我能解决这个问题的唯一方法是:
run.py的内容:
import sys
import os
path = os.path.abspath(__file__)
sys.path.append(os.path.join(os.path.dirname(path), "../"))
import foo
这样就可以了,但问题是(如果我没记错的话)这会将foo /的父目录添加到sys.path
,从而在foo /的所有同级文件夹中搜索Python模块。
在某些情况下,我确实真的不想这样做。 我只想将一个目录作为模块添加到路径中,但是我不知道如何在不添加该目录的父目录以及该父目录下的所有其他目录的情况下添加该模块。
我在这里俯瞰什么吗? 有什么简单的方法可以将脚本的父文件夹添加为模块?
我不太明白为什么run
是要导入自己的父包 。 毕竟,打包只是将模块收集在一起的一种方式。 它并不意味着具有重要的功能。
包是一种通过使用“点分模块名称”来构造Python模块名称空间的方法。 例如,模块名称AB在名为A的包中指定了一个名为B的子模块。就像使用模块可以节省不同模块的作者不必担心彼此的全局变量名称一样,使用带点划线的模块名称也可以节省作者诸如NumPy或Python Imaging Library之类的多模块软件包,而不必担心彼此的模块名称。
您确定不想run
导入同级模块吗? 您可以使用相对导入来完成 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.