无法导入部分初始化的子包
这是一个关于如何使用 __init__.py 和子包的问题。我搜索了一下,居然没有找到一个好的答案。
我的文件结构是这样的:
my_package/
setup.py
my_package/
__init__.py
module1.py
my_sub_package/
__init__.py
module2.py
my_package/__init__.py 的内容是:
from . import my_sub_package
from .module1 import *
my_package/my_sub_package/__init__.py 的内容是:
from .module2 import *
setup.py 的内容是:
from setuptools import setup
setup(
name='My Package',
packages=['my_package'],
version='1.0.0'
)
我可以从父文件夹用下面的方式导入这个包:
import my_package
问题出现在我安装这个包后,在另一个文件夹(不包含 my_package 的文件夹)运行时。 我用下面的方式安装这个包:
pip3 install my_package/ --upgrade --force-reinstall
然后,当我在 Python 中尝试导入它时:
import my_package
ImportError: 无法从部分初始化的模块 'my_package' 导入名称 'my_sub_package'(很可能是由于循环导入导致的) (<PYTHON_PATH>/lib/python3.11/site-packages/my_package/__init__.py)
我哪里做错了?
我完全按照这个答案里的说法在做: 子包和 __init__.py
1 个回答
1
显然,问题出在setup.py文件里,我需要在这里说明my_sub_package也是一个包:
from setuptools import setup
setup(
name='My Package',
packages=['my_package','my_package.my_sub_package],
version='1.0.0'
)
一个更好的解决办法是使用find_packages
这个功能。
from setuptools import setup, find_packages
setup(
name='My Package',
packages= find_packages(),
version='1.0.0'
)