我需要在我的脚本中直接从PyPI安装一个包。
是否有某个模块或distutils
(distribute
, pip
等)功能,允许我只需执行类似于pypi.install('requests')
的命令就能将requests安装到我的虚拟环境中?
我需要在我的脚本中直接从PyPI安装一个包。
是否有某个模块或distutils
(distribute
, pip
等)功能,允许我只需执行类似于pypi.install('requests')
的命令就能将requests安装到我的虚拟环境中?
import sys
from subprocess import run, PIPE, STDOUT
import pkg_resources
def run_cmd(cmd):
ps = run(cmd, stdout=PIPE, stderr=STDOUT, shell=True, text=True)
print(ps.stdout)
# packages to be conditionally installed with exact version
required = {"click==8.0.1", "semver==3.0.0.dev2"}
installed = {f"{pkg.key}=={pkg.version}" for pkg in pkg_resources.working_set}
missing = required - installed
if missing:
run_cmd(f'pip install --ignore-installed {" ".join([*missing])}')
我不太喜欢所有的建议选项,所以我为此写了我的库。
安装它:
pip install instld
并使用上下文管理器:
import installed
with installed('some_package'):
import some_module
要了解更多关于该库的信息,请访问我上面提供的链接。它允许您在一个程序中使用两个不同版本的同一库,或者例如不兼容的库。
尝试以下方法。到目前为止,这是对我最有效的方法。
首先安装前4个,然后在“REQUIRED”列表中提及新的那些:
import pkg_resources
import subprocess
import sys
import os
REQUIRED = {
'spacy', 'scikit-learn', 'numpy', 'pandas', 'torch',
'pyfunctional', 'textblob', 'seaborn', 'matplotlib'
}
installed = {pkg.key for pkg in pkg_resources.working_set}
missing = REQUIRED - installed
if missing:
python = sys.executable
subprocess.check_call([python, '-m', 'pip', 'install', *missing], stdout=subprocess.DEVNULL)
pip._internal
不是为了可导入而设计的,当在另一个程序中导入时,它可能会做绝对随机的事情。 - Antti Haapala -- Слава Україні