首页 > 解决方案 > 在 venv 中安装 sdist:无法从 install_requires 安装软件包

问题描述

我正在尝试将单个文件 Python 脚本转换为带有 CLI 脚本的包。我正在关注打包 Python 项目指南。

我想用来venv尝试我的本地构建sdist,但我似乎从pip install虚拟环境中得到错误。

这是我正在尝试的:

$ python3 setup.py sdist
$ cd ~/venv
$ python3 -m venv .
$ source bin/activate
$ pip3 install ~/my_module/dist/my_module_0.1.tar.gz

Processing ~/my_module/dist/my_module-0.1.tar.gz
Collecting PIL (from my_module==0.1)
  Could not find a version that satisfies the requirement PIL (from my_module==0.1) (from versions: )
No matching distribution found for PIL (from my_module==0.1)

我的包结构(以防万一):

├── my_module
│   ├── app.py
│   ├── cli.py
│   ├── __init__.py
│   └── my_module.py
└── setup.py

安装程序.py

注意install_requires

import setuptools
setuptools.setup(
    name='my_module',
    # ...
    packages=setuptools.find_packages(),
    entry_points={
        'console_scripts': [
            'my-cli=my_module.cli:main',
            'my-app=my_module.app:main'
        ],
    },
    install_requires=[
        'PIL',
        'imagehash',
        'exifread'
    ],
    python_requires='>=3.6'

我的模块.py

摘录以显示依赖关系...

import os
import sys
import time
import shutil
import json
import pickle
from collections import defaultdict
from multiprocessing import Pool, TimeoutError, cpu_count
from PIL import Image
import imagehash
import exifread

# ...

无论我在 setup.pyinstall_requires列表中放了什么,virtualenv pip3似乎都找不到它。我的印象是它应该在虚拟环境中安装这些要求。

也许我在这里遗漏了一些明显的东西。我的包设置或测试方法有问题吗?

标签: pythonpython-packaging

解决方案


@Sraw 在评论中回答。

PIL是一个错字。应该是Pillow

我曾考虑过它可能是这样的,所以我尝试放置一些我认为永远不会失败的东西,比如os,但这也失败了,因为它没有托管在存储库中,因为它是与 Python 本身一起分发的核心包。

希望这可以帮助一些将来忘记你的迷失的import PIL灵魂pip install Pillow


推荐阅读