Python-与setup.py一起安装时,程序包无法导入子程序包

时间:2018-07-09 11:48:18

标签: python module package 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类,它依赖于sub_pkg1sub_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

1 个答案:

答案 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