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

bsc*_*pio 12 python pip

我正在寻找一种方法来使用pip或类似方法将python包列表安装到自定义目标目录(ex./mypath/python/pkgs/),但也排除/黑名单特定依赖项.

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

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

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

pip install --log pip.log -r req.txt -t /mypath/pypkgs/ --exclude exclude.txt
Run Code Online (Sandbox Code Playgroud)

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

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

pip install --log pip.log -r req.txt -t /mypath/python/pkgs/
Run Code Online (Sandbox Code Playgroud)

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

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

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

pip:升级包而不升级特定依赖项

kod*_*tin 12

面对类似的问题,并使用正在运行的bash shell我设法排除了特定的包

pip install $(grep -ivE "pkg1|pkg2|pkg3" requirements.txt)
Run Code Online (Sandbox Code Playgroud)

where pkg1等等是要排除的包的名称.

  • 如果您做了一些评论,那么您也必须删除它们:`pip install $(grep -ivE "^pkg1|^pkg2|^#|^\s*$"requirements.txt | sed s/#.* //g)` (2认同)
  • 我刚刚发现这个效果很好!`pip install -r <(sed '/^[pk1|pkg2]/d'requirements.txt)` (2认同)

lin*_*k89 10

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

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

pip install --no-deps和是非常有用的命令,允许您在无法正确完成pip check依赖项时自行解决依赖项。pip该解决方案的缺点是输出pip check是为人类设计的,它不能pip install -r直接使用,因此您必须手动重新格式化输出或使用awk命令。

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

更新

您还可以使用johnnydep递归方式列出依赖项。所以下面的一行应该有效

johnnydep paddleocr --output-format pinned | grep -v opencv > pkgs.txt && pip install --no-deps -r pkgs.txt
Run Code Online (Sandbox Code Playgroud)

参考文献:

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


小智 6

考虑子依赖关系的一种方法是首先安装 except.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
Run Code Online (Sandbox Code Playgroud)


tho*_*nic 5

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

  • 如果你第一次做正常,pip freeze > requirements.txt你将获得所有传递依赖(例如,不排除任何东西.)

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

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