[英]Python app install via pip3 does not install source packages
這是我的python
項目結構
▶ tree -L 2
.
├── Dockerfile
├── README.md
├── my_app
│ ├── __init__.py
│ ├── main.py
│ ├── settings.py
│ ├── utils.py
│ └── views.py
我的setup.py
的一部分
package_dir={'': 'my_app'},
packages=find_packages(where='my_app'),
include_package_data=True,
python_requires='>=3.9',
entry_points={
'console_scripts': [
'my-app=my_app.main:run',
],
pip3 install . --force-reinstall
運行正常,我在 virtualenv 中。
但是,當嘗試運行程序時
Traceback (most recent call last):
File "/Users/myuser/myfolder/.venv/bin/my-app", line 5, in <module>
from my_app.main import run
ModuleNotFoundError: No module named 'my_app'
我還注意到在ls.venv/lib/python3.9/site-packages/
沒有my-app
的源文件,只有my_app-0.0.1.dist-info
文件
這是為什么?
您誤解了find_packages(where='my_app')
工作原理, 請參見:
find_packages(where='.', exclude=())
返回目錄“where”中找到的所有 Python 包的列表
這意味着這並不意味着嘗試從當前文件夾中查找 package my_app
,而是嘗試從my_app
文件夾中查找包,在您的情況下,不會在my_app
中找到 package 。
因此,對於您的情況,下一個就足夠了:
設置.py :
from setuptools import setup, find_packages
setup(
name="my-app",
version="0.0.1",
packages=find_packages(),
include_package_data=True,
entry_points={
'console_scripts': [
'my-app=my_app.main:run',
],
}
)
另外,如果您的主要意圖只是包含my_app
,繞過其他人,那么find_packages(include=[
語法就是您要尋找的:
設置.py :
from setuptools import setup, find_packages
setup(
name="my-app",
version="0.0.1",
packages=find_packages(include=['my_app']),
include_package_data=True,
entry_points={
'console_scripts': [
'my-app=my_app.main:run',
],
}
)
注意,不要使用package_dir={'': 'my_app'}
,它會嘗試找到my_app.my_app
,除非你使用package_dir={'my_app': 'my_app'}
,但在你的情況下它沒有意義。
這不是解決方案嗎? pip 安裝在全局站點包中而不是 virtualenv我在工作機器上有類似的東西,安裝要求滿足,但運行時找不到模塊,全局刪除 package 並再次安裝。 可能會有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.