Pip安装到自定义目标目录并排除特定依赖项

时间:2015-10-30 16:49:50

标签: python pip

我正在寻找一种方法来使用pip或类似方法将python包列表安装到自定义目标目录(例如/mathath/python/pkgs/),但也排除/ blacklist 特定依赖项。

我想排除特定的依赖项,因为它们已经从不同的安装路径(例如anaconda安装)得到满足。我没有权利将软件包添加到默认的python安装中(我也不想)。

我目前使用pip的-r和-t选项。但是还没有找到排除特定包的方法。

像这样的pip命令是理想的:

pip install --log pip.log -r req.txt -t /mypath/pypkgs/ --exclude exclude.txt

--no-deps不是一个选项,因为我需要一些依赖项。

我目前正在寻找一个python脚本来执行pip安装,其中包含我不需要的依赖项:

pip install --log pip.log -r req.txt -t /mypath/python/pkgs/

然后(自动)在pip安装完成后删除不需要的依赖项。

我希望pip命令的某些组合可以实现我正在寻找一些直截了当的东西。我使用的是pip 7.1.2。谢谢!

类似,但我没有升级,并且想要指定目标路径:

pip: upgrade package without upgrading particular dependency

4 个答案:

答案 0 :(得分:9)

面对类似的问题,并使用正在运行的bash shell我设法用

排除特定的包
pip install $(grep -ivE "pkg1|pkg2|pkg3" requirements.txt)

其中pkg1等等是要排除的软件包的名称。

答案 1 :(得分:5)

我认为这基本上可以通过几个步骤来实现,假设您正在使用virtualenv或类似的......

  • 如果您首先执行正常pip freeze > requirements.txt,则会获得所有传递依赖项(例如,不排除任何内容)。

  • 现在编辑requirements.txt,删除要排除的包...

  • 最后,在新环境中pip install -r requirements.txt -t ... --no-deps。 Voila:你已经安装了你想要的依赖项,同时排除了特定的依赖项。

答案 2 :(得分:1)

一种考虑子依赖性的方法是先安装exclude.txt环境,然后再安装req.txt环境,然后检查diff,最后将其安装到目标目录中。

使用在GNU / Linux上可以使用的virtualenv的示例:

virtualenv tmpenv
source tmpenv/bin/activate

pip install -r exclude.txt
pip freeze > exclude-with-deps.txt
pip install -r req.txt
pip freeze > req-with-deps.txt
comm -13 exclude-with-deps.txt req-with-deps.txt > final-req.txt

pip install -r final-req.txt --no-deps -t pypkgs

答案 3 :(得分:0)

您可以使用 pip install --no-depspip check 来排除特定的包。 我的一个真实例子是,当我在 Jetson Nano 上安装 paddleocr 时,pip 一直为我安装 python-opencv,我自己已经安装了 pip,但是 {{ 1}} 无法检测到它。要停止 pip 为我安装 pip,步骤如下

  1. 使用 python-opencv 安装 pip install --no-deps paddleocr 而没有其依赖项
  2. 使用 paddleocr 列出未解析的依赖项,重新格式化输出以便 pip check 可以读取它,然后删除您不想安装的包(它在 pip install -r我的情况),并将其保存到名为 python-opencv
  3. 的文件中
  4. 使用 fix-deps.txt 安装未解析的依赖项
  5. 重复第 2 步和第 3 步,直到 pip install --no-deps -r fix-deps.txt 的输出仅包含您不想安装的软件包。

pip checkpip install --no-deps 是非常有用的命令,它们允许您在 pip check 无法为您解决问题时自行解决依赖关系。这个方案的缺点是pip的输出是为人类设计的,它不能直接被pip check使用,所以你必须手动重新格式化输出或使用pip install -r命令。< /p>

已经为 pip 社区创建了 PR 和 issue,使 awk 的输出适合 pip check 阅读,但出于某种原因,他们认为这不是一个好主意。所以我想这是我们现在能做的最好的事情了。

参考:

  1. https://github.com/pypa/pip/pull/10108
  2. https://github.com/pypa/pip/issues/10066#issuecomment-872638361