SetupTools Python-项目内部导入问题

时间:2019-01-01 23:56:37

标签: python import python-import setuptools setup.py

我正在尝试构建一个简单的项目,然后准备它来创建whl文件。但是在pip install <name>.whl之后,我遇到了奇怪的导入问题。 项目结构:

foo/
    /foo
        __init__.py
        main.py
        bar.py
    setup.py

setup.py文件:

from setuptools import setup, find_packages

setup(
    name='foo',
    version='0.0.1',
    packages=find_packages(),
    include_package_data=True,
    entry_points={'console_scripts': ['foo=foo.main:func1']}
)

main.py

from bar import func2

def func1():
    print('func1')
    func2()

bar.py

def func2():
    print('func2')

我有一个空的初始化文件。

我通过以下命令创建whl文件:python3 setup.py bdist_wheel 然后cd dist/ && pip install ...

但是当我用foo运行脚本时,出现错误:

ModuleNotFoundError:没有名为“ bar”的模块

仅当我将项目拆分为几个文件时,当我尝试将所有内容保留在main.py(已删除的bar.py)中而没有导入时,此问题才存在。

任何想法我该如何修改setup.py?

1 个答案:

答案 0 :(得分:1)

问题出在您的进口上,而不是您的setup.py。发生的情况是您的setup.py正在安装软件包foo,该软件包具有子模块mainbar

要从子模块导入功能,请执行以下操作:

from foo.bar import func2

,或者,如果您要进行软件包的相对导入(例如,从bar导入main

from .bar import func2

如果正在执行导入的模块不属于foo软件包的一部分,则此第二个版本将不起作用。