我想在python中具有以下项目目录结构:
project\
generic.py
subdir1\
file1.py
subdir2\
file2.py
subdir3\
file3.py
在file1.py内,我想从项目的根目录导入 generic.py 。
import generic
不幸的是,当我尝试执行“ file1.py”时出现错误
root:~/project/sidir1# python file1.py
Traceback (most recent call last):
File "file1.py", line 7, in <module>
import generic
ImportError: No module named generic
我想执行单个 file * .py 并包含 generic.py 。
如何在这样的目录结构下正确包含它?
答案 0 :(得分:1)
您可以通过在根目录中创建__init__.py
来将python项目打包。
然后您可以使用相对导入,例如:from .. import generic
答案 1 :(得分:0)
在这里看看: 如何导入上面目录中的Python类? How to import a Python class that is in a directory above?
答案 2 :(得分:0)
这是 Python路径的原因,当您使用import
时,python将尝试在sys.path
中的每个目录中查找是否存在具有给定名称的模块,如果他不这样做的话。没找到,他加薪。
要解决您的问题,只需将父目录添加到python路径
import sys
sys.path.append("..")
答案 3 :(得分:0)
我建议您将generic.py
与其他子模块一起包装在包装中。从根目录导入通常是一个好方法,以后需要调试不再按应有的方式运行的导入。一揽子产品中的相对进口也可能会引起问题。
只需构建一个像这样的结构:
project\
my_package\
generic.py
__init__.py
subdir1\
file1.py
__init__.py
subdir2\
file2.py
__init__.py
subdir3\
file3.py
__init__.py
现在在file*.py
中执行:from my_package import generic
现在,在project
级别上,放置一个main.py
或类似的脚本,您可以在其中使用my_package中可用的功能。