Python - 安装 setup.py 时无法导入子包
Python - package can not import subpackages when installed with setup.py
我开发了一个 python 包,我想在另一个项目中使用它。
包结构如下例所示:
- foo
- setup.py
- README.md
- foo
- __init__.py
- main.py
- bar.py
- sub_pkg1
- __init__.py
- example.py
- sub_pkg2
- __init__.py
- example2.py
bar.py
文件包含 Bar
-Class 依赖于 sub_pkg1
和 sub_pkg2
中的文件,它们像
from sub_pkg1 import example.py
__init__.py
文件只导入其目录中的每个 python 文件。
例如 sub_pkg1
的 __init__.py
:
from example import ExampleClass
main.py
文件只是导入 Bar Class 并执行它的一些方法。
from bar import Bar
bar = Bar()
bar.foo()
setup.py
文件如下所示:
from setuptools import setup, find_packages
setup(
name='Bar',
version='0.0.7',
author='me',
packages=find_packages()
)
当我直接从包中 运行 main.py
文件时,它就像一个魅力。
但是,当我使用以下命令使用 pip 在我的其他项目中安装它时:
(我还不想将包发布到 PyPi,只想在我的其他项目中包含开发版本)
pip install -e /path/to/package
并尝试导入它 - 我收到错误:
ModuleNotFoundError: No module named 'example'
我需要以某种方式导出 sub_packages 吗?
我用Python3.6
而不是 from sub_pkg1 import example.py
使用 from sub_pkg1 import ExampleClass
与 sub_pkg1 和 sub_pkg2 中的 __init__.py
一样,您已经导入了 ExampleClass
,现在您可以直接从 [=23 导入 ExampleClass
=] 项目中的任何位置。
在此处阅读有关 __init__.py
和模块的更多信息:https://docs.python.org/3/tutorial/modules.html
我开发了一个 python 包,我想在另一个项目中使用它。 包结构如下例所示:
- foo
- setup.py
- README.md
- foo
- __init__.py
- main.py
- bar.py
- sub_pkg1
- __init__.py
- example.py
- sub_pkg2
- __init__.py
- example2.py
bar.py
文件包含 Bar
-Class 依赖于 sub_pkg1
和 sub_pkg2
中的文件,它们像
from sub_pkg1 import example.py
__init__.py
文件只导入其目录中的每个 python 文件。
例如 sub_pkg1
的 __init__.py
:
from example import ExampleClass
main.py
文件只是导入 Bar Class 并执行它的一些方法。
from bar import Bar
bar = Bar()
bar.foo()
setup.py
文件如下所示:
from setuptools import setup, find_packages
setup(
name='Bar',
version='0.0.7',
author='me',
packages=find_packages()
)
当我直接从包中 运行 main.py
文件时,它就像一个魅力。
但是,当我使用以下命令使用 pip 在我的其他项目中安装它时:
(我还不想将包发布到 PyPi,只想在我的其他项目中包含开发版本)
pip install -e /path/to/package
并尝试导入它 - 我收到错误:
ModuleNotFoundError: No module named 'example'
我需要以某种方式导出 sub_packages 吗?
我用Python3.6
而不是 from sub_pkg1 import example.py
使用 from sub_pkg1 import ExampleClass
与 sub_pkg1 和 sub_pkg2 中的 __init__.py
一样,您已经导入了 ExampleClass
,现在您可以直接从 [=23 导入 ExampleClass
=] 项目中的任何位置。
在此处阅读有关 __init__.py
和模块的更多信息:https://docs.python.org/3/tutorial/modules.html