我正在使用pip安装新的Python软件包。我想用一个命令在所有当前虚拟环境中安装此软件包。这可能吗?如果可以,我该怎么办?
当前,当我想在虚拟环境中安装新的Python软件包“ xyz”时,我激活该venv,然后在命令行中使用标准pip install“ xyz”。但是,这只会将其安装在当前激活的虚拟环境中。当然,这首先是虚拟环境的重要组成部分。
如果要在所有虚拟环境中安装软件包“ xyz”,则必须为每个环境激活-install-deactivate。
我想避免这个安全但费力的过程,只需使用一个命令就可以在我当前的所有虚拟环境中安装新的软件包“ xyz”。
例如: 我列出了现有的虚拟环境(在本地计算机上):
λconda环境列表
conda环境:
base * C:\ ProgramData \ Anaconda3 cntk C:\ ProgramData \ Anaconda3 \ envs \ cntk fastai C:\ ProgramData \ Anaconda3 \ envs \ fastai
我要在所有环境(基本,cntk,fastai)中安装的软件包是pydicom。
λ激活碱基
(基本)λpip安装pydicom
(基本)λipython Python 3.7.3(默认,2019年4月24日,15:29:51)[MSC v.1915 64位(AMD64)] 输入“版权”,“信用”或“许可证”以获取更多信息 IPython 7.5.0-增强的交互式Python输入“?”寻求帮助。
在[1]中:导入pydicom 在[2]中:
(基本)λ康达停用
λ激活cntk
(cntk)λipython
Python 3.6.8 | Anaconda,Inc. | (默认值,2019年2月21日,18:30:04)[MSC v.1916 64位(AMD64)] 输入“版权”,“信用”或“许可证”以获取更多信息 IPython 7.4.0-增强的交互式Python输入“?”寻求帮助。
在[1]中:导入pydicom
ModuleNotFoundError Traceback(最近一次通话) 在 ----> 1个导入pydicom
ModuleNotFoundError:没有名为“ pydicom”的模块
在[2]中:
这一切都很好,venv正在努力。
λconda激活cntk
(cntk)λpip install pydicom
收集pydicom 使用缓存的https://files.pythonhosted.org/packages/43/88/d3c419ab2e753e7651510882a53219373e78fb55294cb247dffd3934ea55/pydicom-1.2.2-py2.py3-none-any.whl 安装收集的软件包:pydicom 成功安装pydicom-1.2.2
(cntk)λipython
Python 3.6.8 | Anaconda,Inc. | (默认值,2019年2月21日,18:30:04)[MSC v.1916 64位(AMD64)] 输入“版权”,“信用”或“许可证”以获取更多信息 IPython 7.4.0-增强的交互式Python输入“?”寻求帮助。
在[1]中:导入pydicom
在[2]中:
自从我在venv中安装pydicom以来,这显然很有效。
理想情况下,会有类似以下的命令: $ pip install-,
或
$ pip安装-全部
将安装到所提供的venv列表或所有可用的venvs。
我正在考虑使用$ conda env list然后解析输出的变通方法。使用简单的脚本顺序安装到列出的每个venv中。这种思想火车将我带到了我的子问题:
问:可以在不首先激活该venv的情况下将Python软件包安装到虚拟环境吗?
我怀疑有一个简单的单行解决方案(尽管那会很好),所以欢迎提供解决方法的建议。
如果我自动将新的Python软件包安装到所有venv的意图与最佳做法不符,也欢迎提出警告。
答案 0 :(得分:2)
“激活”并不是魔术,它只是将virtualenv可执行文件的位置添加到您的路径并更改提示。如果您想在不激活虚拟环境的情况下安装某些东西,则可以执行以下操作:
/path/to/virtualenv/bin/pip install foo
对于安装到所有虚拟环境,我认为没有任何自动方法可以做到这一点,特别是因为env可以在任何地方存在,所以您也需要一种发现它们的方法。但是您可以根据需要将上述命令与环境位置列表轻松组合。
答案 1 :(得分:1)
我使用virtualenvwrapper,它有一个命令allvirtualenv
,所以我可以运行
allvirtualenv pip install -U pip setuptools
我什至更新了~/.tox
中tox创建的所有虚拟环境。我的整个脚本run-all-venv
是
#! /usr/bin/env bash
eval "$@"
if source virtualenvwrapper.sh; then
allvirtualenv eval "$@"
for tox_envs in ~/.tox/*; do
if [[ "$tox_envs" = */.tox/\* ]]; then
exit 0
fi
WORKON_HOME="$tox_envs" allvirtualenv eval "$@"
done
fi
我将其运行为
run-all-venv pip install -U pip setuptools