【问题标题】:Python app install via pip3 does not install source packages通过 pip3 安装 Python 应用程序不会安装源包
【发布时间】:2021-06-14 03:54:17
【问题描述】:

这是我的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文件

这是为什么呢?

【问题讨论】:

    标签: python


    【解决方案1】:

    您误解了find_packages(where='my_app') 的工作原理,请参阅this

    find_packages(where='.', exclude=())
    返回目录'where'中找到的所有Python包的列表

    这意味着这并不意味着尝试从当前文件夹中查找包my_app,而是尝试从文件夹my_app中查找包,在您的情况下,在my_app中找不到包。

    所以,对于你的情况,下一个就足够了:

    setup.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=[ 语法:

    setup.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'},但在你的情况下没有意义。

    【讨论】:

      【解决方案2】:

      这不是解决方案吗? pip installing in global site-packages instead of virtualenv 我在工作机器上有类似的东西,安装时满足要求,但在运行时找不到模块,全局删除该包并再次安装。可能会有所帮助

      【讨论】:

        猜你喜欢
        • 2021-06-26
        • 1970-01-01
        • 2019-10-09
        • 1970-01-01
        • 1970-01-01
        • 2014-01-06
        • 2017-04-11
        • 2018-01-10
        • 1970-01-01
        相关资源
        最近更新 更多