我在python软件包发行版中做了我的第一步。
不幸的是,从pip成功安装后,我有了ModuleNotFoundError
。
我的dirs布局非常简单:
maindir
|- setup.py
|- pysoft
|- __init__.py
|- main.py
|- pylib.py
main.py:
import pylib
def main():
print("main program")
pylib.libfunc()
if __name__ == '__main__':
main()
pylib.py:
def libfunc():
print("lib func")
setup.py:
import setuptools
setuptools.setup(
name='pysoft',
version='0.0.21',
author='als',
author_email='als@gnail.com',
description='deploy tester',
py_modules=['pylib'],
packages=setuptools.find_packages(),
python_requires='>=3.6',
entry_points={
'console_scripts': [
'pysoft = pysoft.main:main',
],
},
)
我打包并上传到 test.pypi.org :
python3 setup.py sdist bdist_wheel
python3 -m twine upload --repository-url https://test.pypi.org/legacy/ dist/*
我设置并启动新的virtualenv
并安装我的软件包:
python3 -m pip install -i https://test.pypi.org/simple/ pysoft
然后我尝试运行它,但出现错误:
pysoft
Traceback (most recent call last):
File "/home/fat/buff/tt/bin/pysoft", line 5, in <module>
from pysoft.main import main
File "/home/fat/buff/tt/lib/python3.6/site-packages/pysoft/main.py", line 1, in <module>
import pylib
ModuleNotFoundError: No module named 'pylib'
您能找出我错了一步吗?
答案 0 :(得分:1)
您执行import pylib
就像说pylib
是顶层模块或软件包一样。但这不是-它是包pysoft
的子模块。为了正确导入,请执行以下操作:
from pysoft import pylib
py_modules=['pylib']
中的 setup.py
被忽略,因为setuptools
找不到顶级pylib.py
。但是packages=setuptools.find_packages()
可以正常工作,并将pysoft
软件包包括在发行版中。