Setuptools python - 项目中的导入问题

Setuptools python - import problem inside project

我正在尝试构建简单的项目,然后准备创建 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 吗?

问题出在您的 导入 -- 而不是您的 setup.py。发生的事情是您的 setup.py 正在安装包含子模块 mainbar.

的软件包 foo

要从子模块中导入一个函数,您可以这样做:

from foo.bar import func2

或者,如果您正在进行包相对导入(例如,从 main 导入 bar):

from .bar import func2

如果进行导入的模块不是 foo 包的一部分,则第二个版本将无法工作。