有没有办法在所有 python 环境中安装一个包
Is there any way to install a package in all python enviroments
我创建了几个python的conda环境。但有时,我会遇到一些实用程序包,它们对我系统上的所有环境都有帮助。有什么办法不用在所有环境之间来回切换并单独安装它们。
谢谢
如果您将所有虚拟环境存储在一个地方,或者如果您已经使用 virtualenvwrapper
将 virtualenv 存储在 ~/.virtualenvs/
中,您可以使用来自 virtualenvwrapper
的命令 allvirtualenv
;如果您不使用 virtualenvwrapper
,则必须先安装它。
allvirtualenv pip install somepackages
我使用以下 bash 脚本对 运行 ~/.virtualenvs/
和 ~/.tox/
中的所有环境执行命令:
#! /usr/bin/env bash
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
在这种情况下,您可以在 base (root)
环境中安装软件包。在该默认环境中与命令行实用程序(示例 git
)和图形用户界面(示例 spyder
)相关的所有包在您的所有 conda 环境中都是可见的。
更新
你可以使用我的script。取消注释最后 3 行并更改包列表。您可以使用 envs 的手动列表或在所有 envs 中使用自动列表。
import subprocess as sub
def conda_env_list():
p = sub.Popen("conda env list", shell=True, stdout=sub.PIPE, encoding="utf-8")
p.wait()
out = p.communicate()[0].splitlines()
envs = [out[line].split()[0] for line in range(2, len(out)-1)]
return envs
def conda_env_install(envs, packages, channel="default"):
TEMPLATE = "conda install {confirm} -c {channel} -n {env} {packages} "
if isinstance(envs, str):
envs = [envs]
if isinstance(packages, list):
packages = " ".join(packages)
confirm = "-y"
for env in envs:
cmd = TEMPLATE.format(confirm=confirm, packages=packages, \
channel=channel, env=env)
p = sub.Popen(cmd, shell=True, stdout=sub.PIPE, encoding="utf-8")
p.wait()
print(p.communicate()[0])
envs = conda_env_list()
packages = ["git"]
conda_env_install(envs, packages)
我创建了几个python的conda环境。但有时,我会遇到一些实用程序包,它们对我系统上的所有环境都有帮助。有什么办法不用在所有环境之间来回切换并单独安装它们。
谢谢
如果您将所有虚拟环境存储在一个地方,或者如果您已经使用 virtualenvwrapper
将 virtualenv 存储在 ~/.virtualenvs/
中,您可以使用来自 virtualenvwrapper
的命令 allvirtualenv
;如果您不使用 virtualenvwrapper
,则必须先安装它。
allvirtualenv pip install somepackages
我使用以下 bash 脚本对 运行 ~/.virtualenvs/
和 ~/.tox/
中的所有环境执行命令:
#! /usr/bin/env bash
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
在这种情况下,您可以在 base (root)
环境中安装软件包。在该默认环境中与命令行实用程序(示例 git
)和图形用户界面(示例 spyder
)相关的所有包在您的所有 conda 环境中都是可见的。
更新
你可以使用我的script。取消注释最后 3 行并更改包列表。您可以使用 envs 的手动列表或在所有 envs 中使用自动列表。
import subprocess as sub
def conda_env_list():
p = sub.Popen("conda env list", shell=True, stdout=sub.PIPE, encoding="utf-8")
p.wait()
out = p.communicate()[0].splitlines()
envs = [out[line].split()[0] for line in range(2, len(out)-1)]
return envs
def conda_env_install(envs, packages, channel="default"):
TEMPLATE = "conda install {confirm} -c {channel} -n {env} {packages} "
if isinstance(envs, str):
envs = [envs]
if isinstance(packages, list):
packages = " ".join(packages)
confirm = "-y"
for env in envs:
cmd = TEMPLATE.format(confirm=confirm, packages=packages, \
channel=channel, env=env)
p = sub.Popen(cmd, shell=True, stdout=sub.PIPE, encoding="utf-8")
p.wait()
print(p.communicate()[0])
envs = conda_env_list()
packages = ["git"]
conda_env_install(envs, packages)