我开发了一个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
类,它依赖于sub_pkg1
和sub_pkg2
中的文件,这些文件的导入方式类似于
from sub_pkg1 import example.py
__init__.py
文件只是将每个python文件导入其目录中。
例如__init__.py
中的sub_pkg1
:
from example import ExampleClass
main.py
文件仅导入Bar类并执行其一些方法。
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?
我使用Python 3.6
答案 0 :(得分:1)
使用from sub_pkg1 import example.py
代替from sub_pkg1 import ExampleClass
与sub_pkg1和sub_pkg2的__init__.py
中一样,您已经导入了ExampleClass
,现在可以从项目中任何地方的sub_pkg1直接导入ExampleClass
。
在此处了解有关__init__.py
和模块的更多信息:https://docs.python.org/3/tutorial/modules.html