13

基本上我和这个人问了同样的问题:如何在 Python 中进行相对导入?

但是没有人给他一个正确的答案。鉴于您在一个子文件夹中,并且您想进入一个目录,然后进入另一个子文件夹,按照他们的建议做是行不通的(正如 OP 在他对他们的回答的评论中指出的那样)。

我知道您可以使用 sys.path 来做到这一点,但我更喜欢更简洁的方法。

例子:

App
__init__.py
Package_A
--__init__.py
--Module_A.py
Package_B
--__init__.py
--Module_B.py

如何将 Module_A 导入 Module_B?

4

3 回答 3

12
main.py
setup.py
app/ ->
    __init__.py
    package_a/ ->
       __init__.py
       module_a.py
    package_b/ ->
       __init__.py
       module_b.py
  1. 你跑python main.py
  2. main.py做:import app.package_a.module_a
  3. module_a.pyimport app.package_b.module_b

或者 2 或 3 可以使用:from app.package_a import module_a

只要您app在 PYTHONPATH 中,它就会起作用。main.py那时可能在任何地方。

因此,您编写一个setup.py将整个应用程序包和子包复制(安装)到目标系统的 python 文件夹和main.py目标系统的脚本文件夹。

于 2009-01-21T02:15:30.967 回答
2

如果我阅读 正确,在 Python 2.5 或更高版本中:

from ..Module_B import Module_B

我以为我精通 Python,但我不知道这在 2.5 版中是可能的。

于 2009-01-21T00:27:19.923 回答
0

如果您随后将 Module_B 导入到 App,您将

Module_B.py:导入模块A

App.py(它还导入了现在默认位于 Pythonpath 中的 ModuleA)

import Module_B.Module_B

另一种选择是将 __init__.py (Module_A/App 文件夹中的那个)更新为:

import os
import sys
sys.path.extend('%s../' % os.getcwd())
import ModuleA

另一种选择是将您的文件夹添加到 PYTHONPATH 环境变量中。

于 2009-01-21T00:42:43.790 回答