我正在尝试从兄弟文件夹中的python文件导入模块。我在这里阅读了几个类似的问题,并尝试应用那里列出的解决方案,但我无法解决问题。
结构如下:
parentfolder/gfolder/codefolder/fileA.py
parentfolder/gfolder/utilfolder/util.py
gfolder
,codefolder
和utilfolder
都有__init__.py
。
我试图在fileA.py中执行操作:
import gfolder.utilfolder.util as util
我也尝试在import语句之前添加:
sys.path.append(".../parentfolder/")
这也不起作用:
import gfolder.utilfolder.util as util
ModuleNotFoundError: No module named 'gfolder'
a similar question中的解决方案表示将__init.py__
包含在我已有的目录中。
修改:
现在sys.append
和sys.insert
都工作了,问题是我在路径的末尾加了一个斜杠。当我把它拿出来时,一切都运转了。
答案 0 :(得分:2)
首先,让我来描述 Python模块和&之间的区别。一个 Python包,以便我们俩都在同一页面上。 ✌
import aModuleName
# Here 'aModuleName' is just a regular .py file.
__init__.py
文件。 ✔ from aPackageName import aModuleName
# Here 'aPackageName` is a folder with a `__init__.py` file
# and 'aModuleName', which is just a regular .py file.
因此,当我们有一个名为 proj-dir 的项目目录时,⤵
proj-dir
--|--__init__.py
--package1
--|--__init__.py
--|--module1.py
--package2
--|--__init__.py
--|--module2.py
请注意,我还在 proj-dir 本身添加了一个空的
__init__.py
,这也使它成为一个包。
现在,如果要将 package2 的 module2 中的任何python对象导入 package1 的 module1 ,然后 module1.py 文件中的导入语句将
from proj-dir.package2.module2 import object2
# if you were to import the entire module2 then,
from proj-dir.package2 import module2
答案 1 :(得分:1)
正如Andrew Cox回答了以下帖子Import a module from a relative path
您可以将子目录添加到Python路径中,以便将其作为普通脚本导入
import sys
sys.path.insert(0, <path to gfolder>)
import gfolder
你也可以将目录添加到Linux系统的PATH var中(我在处理项目时使用它,最后我将PATH修改为它的原始值)
如果你保持以下结构而不是在框边
parentfolder/gfolder/codefolder/fileA.py
parentfolder/gfolder/utilfolder/util.py
parentfolder/gfolder/main.py
运行main.py