首页 > 解决方案 > 如何指示 pip 使用 --no-binary 标志安装要求

问题描述

我有一个要打包的应用程序,它依赖于protobuf. 必须像这样安装 protobuf:

pip install protobuf --no-binary=protobuf protobuf

我怎样才能将它包含在我的setup.py install_requires?

注意:我的要求要求此过程自动通过 setup.py。

我知道这个这个

因此,我尝试在 install_requires 或 requirements.txt 中包含这些内容,但没有成功:

#requirements.txt
protobuf
--no-binary=protobuf

当我打包我的应用程序时,如何提供--no-binary=protobuf protobuf(我知道是pip标志)安装?protobuf

更新: 我想要的是按照我在以这种方式安装我的包时提到的方式安装 protobuf 包:

`pip install my_package.whl`

标签: pythonpip

解决方案


使用requirements.txt文件安装

我想你可以简单地在同一行添加标志。这对我有用:

# requirements.txt

protobuf --no-binary protobuf
pandas

有了这个requirements.txt,protobuf 安装时没有二进制文件,而 pandas 仍然安装了.whl.

通过运行pip install -r requirements.txt,你会得到类似的东西:

$ pip install -r requirements.txt 
Collecting pandas
  ...
Collecting protobuf
  Using cached protobuf-3.17.3.tar.gz (228 kB)
Skipping wheel build for protobuf, due to binaries being disabled for it.
Installing collected packages: protobuf, pandas
    Running setup.py install for protobuf ... done
Successfully installed pandas-1.1.5 protobuf-3.17.3

在打包的库中自动安装

如果你想在protobuf不包含二进制文件的情况下包含依赖项,并且你正在用一个文件打包你的库,setup.py你可以package@http://link/to/package.tar.gz在.install_requiressetup

from setuptools import setup, find_packages

setup(
    name='your package`,
    version='0.1',
    packages=find_packages(),
    install_requires=[
        'click',
        'pyyaml',
        'protobuf@https://github.com/protocolbuffers/protobuf/releases/download/v3.17.3/protobuf-python-3.17.3.tar.gz'
    ]
)

此解决方案的缺点是它还指定了依赖项的版本。

希望这可以帮助 !


推荐阅读