【发布时间】:2019-07-25 13:24:15
【问题描述】:
这是我的项目结构
~/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 也可以:
【问题讨论】:
-
你不是在包的根目录中缺少
__init__.py(main.py所在的位置)吗?另外,你可以试试你从另一个地方发布的命令pip install --editable .,而不是源目录(当然是正确的路径,而不是.)? -
我在根项目级别添加了
__init__.py,但没有成功 -
你不应该从 main 导入。如果您的程序有多个入口点,它很容易破坏您的程序并且还会使其变得粘滞。如果您每个人都想将部分功能提取到独立库中,则必须重新定义应用程序中的每个孤立引用,以使其在应用程序之外可用。
-
@neko 我已经更新了我的答案,当我尝试从不同的仓库安装时会发生什么
标签: python python-3.x setuptools