python从兄弟文件夹导入

jac*_*_pl 2 python

我正在尝试从同级文件夹中的 python 文件导入模块。我在这里阅读了几个类似的问题并尝试应用那里列出的解决方案,但我无法解决问题。

结构如下:

parentfolder/gfolder/codefolder/fileA.py
parentfolder/gfolder/utilfolder/util.py
Run Code Online (Sandbox Code Playgroud)

gfoldercodefolder并且utilfolder都有一个__init__.py.

我正在尝试在 fileA.py 中执行以下操作:

import gfolder.utilfolder.util as util
Run Code Online (Sandbox Code Playgroud)

我还尝试在导入语句之前添加:

sys.path.append(".../parentfolder/")
Run Code Online (Sandbox Code Playgroud)

这也不起作用:

import gfolder.utilfolder.util as util
ModuleNotFoundError: No module named 'gfolder'
Run Code Online (Sandbox Code Playgroud)

类似问题中的解决方案说要包含__init.py__在我已经拥有的目录中。

编辑:现在无论是sys.appendsys.insert工作,问题是,我包括在路径的结尾斜线。当我把它拿出来时,一切正常。

Sus*_*ary 6

首先,让我向您描述Python 模块Python 包之间的区别,以便我们在同一页面上。?


模块是在一次导入下导入并使用的单个 .py 文件(或多个文件)。?

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的,这也使它成为一个包。

现在,如果你想导入任何Python对象模块2包装2模块1包1,然后导入在文件中的语句module1.py

from proj-dir.package2.module2 import object2 # if you were to import the entire module2 then, from proj-dir.package2 import module2

我希望这个简单的解释能澄清您对 Python 导入机制的疑虑。

  • 如果你直接调用脚本(模块),这个答案**不起作用**,你必须使用`python -m project.package1.module1`来代替。 (2认同)