在python项目上导入文件

时间:2018-11-14 15:05:11

标签: python

我想在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

如何在这样的目录结构下正确包含它?

4 个答案:

答案 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中可用的功能。