簡體   English   中英

Python app install via pip3 不安裝源包

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM