python - setuptools python - 项目内导入问题

标签 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()

酒吧.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 正在安装包 foo,它具有子模块 mainbar

要从子模块导入函数,您可以执行以下操作:

from foo.bar import func2

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

from .bar import func2

如果执行导入的模块不是 foo 包的一部分,则第二个版本将不起作用。

关于python - setuptools python - 项目内导入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53999869/

相关文章:

Java:在 CustomClassLoader 中添加类路径

Python duckduckgo 库未安装

python - Python 中的二维关联数组

python - 愚蠢的问题 : Is there a way to make a color pattern repeat every X number of LEDs? 或者我是否必须为 strip 中的每个 LED 写出模式?

c# - 将文本文件行导入特定文本和组合框

sql - 导入文件到表错误: Failure 2673

python - 如果从不同的路径导入模块重新导入

python - 将路径附加到 python 程序

python -/admin/ 'set' 对象的类型错误是不可逆的,并且要反转的参数 ( ) 必须是一个序列

python - 在选定的行上应用 diff 以比较 math.atan2 的角度