这是我的项目结构
~/Workspace/my-app master ✗ ◒
➢ tree -L 2
.
├── build
│ ├── bdist.macosx-10.14-x86_64
│ └── lib
├── dist
│ ├── my-app-0.0.4a0.tar.gz
│ └── my_app-0.0.4a0-py3-none-any.whl
├── gkeconf
│ ├── __init__.py
│ ├── commands.py
│ └── messages.py
├── main.py
├── my-app
│ ├── __init__.py
├── my_app.egg-info
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ ├── dependency_links.txt
│ ├── entry_points.txt
│ ├── requires.txt
│ └── top_level.txt
├── setup.cfg
└── setup.py
这是我的setup.py
entry_points={
'console_scripts': [
'my-app=main:cli',
],
当我从源代码目录执行时
pip install --editable .
跑步说,my-app --version
有效。
当我通过以下方式构建包时
python3 setup.py sdist bdist_wheel
并通过以下方式将其推送到我的私人存储库
python3 -m twine upload --verbose --repository my-private-repo dist/*
然后执行
pip install my-app
(在一个新的新虚拟环境中)
并尝试运行它,它失败如下:
➢ my-app --version
Traceback (most recent call last):
File "/Users/pkaramol/Desktop/.myvenv/bin/my-app", line 6, in <module>
from main import cli
ModuleNotFoundError: No module named 'main'
(.myvenv)
为什么?
MAJOR_UPDATE:看来--editable
旗帜起到了作用。普通pip install .
会产生相同的错误!
编辑:来自其他路径的pip install --editable
也有效:
从my-app
到my_app
的cjange名称
将main
移至my_app
setup.py
的变化
entry_points={
'console_scripts': [
'my-app=my_app.main:cli',
],
您的问题是您的main.py
脚本不是包的一部分。 如果您通过方法pip install -e
安装,则pip仅创建simlink并找到main.py
文件。在正常安装中,不会复制它。