如何在Python模块中正确进行相对导入?

问题描述 投票:0回答:1

假设我有一个包含两个模块的大项目:

workspace/
   module_1/
      main.py
   module_2/
      content.py
      standalone.py

与:

# module_1/main.py

from module_2.content import Foo

Foo.bar()
# module_2/content.py

class Foo:
  def bar():
    pass
# module_2/standalone.py

from content import Foo

Foo.bar()

问题是,在 module_2 中,如果我使用

from content import Foo
,从外部使用时(例如,启动 module_1/main.py 时)它会中断,而使用
from module_2.content import Foo
时,它会在运行standalone.py 时中断。

我是否误解了我应该采取的处理方式?最终目标是拥有一个可以用作其他项目的模块的工具,并且可以单独启动。

python python-3.x relative-import
1个回答
0
投票

包的目录结构:

.
├── my_package
│   ├── __init__.py
│   ├── my_subpackage_1
│   │   ├── __init__.py
│   │   └── main.py
│   └── my_subpackage_2
│       ├── __init__.py
│       ├── content.py
│       └── standalone.py
└── setup.py

import
完整模块路径:

# my_package/my_subpackage_1/main.py

from my_package.my_subpackage_1.content import Foo
...

你可以

pip install .
感谢
setup.py
:

from setuptools import find_packages, setup

setup(
    name="my_package",
    packages=find_packages(),
)
© www.soinside.com 2019 - 2024. All rights reserved.