我正在尝试构建一个简单的项目,然后准备它来创建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?
答案 0 :(得分:1)
问题出在您的进口上,而不是您的setup.py
。发生的情况是您的setup.py
正在安装软件包foo
,该软件包具有子模块main
和bar
。
要从子模块导入功能,请执行以下操作:
from foo.bar import func2
,或者,如果您要进行软件包的相对导入(例如,从bar
导入main
)
from .bar import func2
如果正在执行导入的模块不属于foo
软件包的一部分,则此第二个版本将不起作用。