无法导入部分初始化的子包

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

所以,这是一个关于如何将 __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='Prova Utils',
    packages=['my_package'],
    version='1.0.0'
)

我可以使用以下命令从父文件夹导入 python 中的包:

import my_package

当我安装软件包并在另一个文件夹(不包含 my_package)中运行它时,就会出现问题。 我使用以下方式安装软件包:

pip3 install my_package/ --upgrade --force-reinstall

然后,当我尝试在 Python 中导入它时

import my_package

导入错误:无法部分导入名称“my_sub_package” 初始化模块“my_package”(很可能是由于循环导入) (/lib/python3.11/site-packages/my_package/__init__.py)

我做错了什么?

我正在按照他们在这个答案中所说的那样做:子包和__init__.py

python python-packaging
1个回答
0
投票

显然,问题出在 setup.py 中,我需要在其中指定 my_sub_package 也是一个包:

from setuptools import setup
setup(
    name='Prova Utils',
    packages=['my_package','my_package.my_sub_package],
    version='1.0.0'
)
© www.soinside.com 2019 - 2024. All rights reserved.