我需要在脚本中直接从PyPi安装一个包。 也许有一些模块或distutils(分发,pip等)功能,允许我只执行类似pypi.install('requests')的东西,请求将被安装到我的virtualenv中。


当前回答

你还可以使用如下语句:

import pip

def install(package):
    if hasattr(pip, 'main'):
        pip.main(['install', package])
    else:
        pip._internal.main(['install', package])

# Example
if __name__ == '__main__':
    install('argh')

其他回答

我在@Aaron的回答中添加了一些异常处理。

import subprocess
import sys

try:
    import pandas as pd
except ImportError:
    subprocess.check_call([sys.executable, "-m", "pip", "install", 'pandas'])
finally:
    import pandas as pd

你可以用"install_requires"选项在你自己的包的setup.py中定义依赖模块。

如果您的包需要生成一些控制台脚本,那么您可以使用“console_scripts”入口点来生成将放置的包装器脚本 在“bin”文件夹中(例如你的virtualenv环境)。

这应该可以工作:

import subprocess

def install(name):
    subprocess.call(['pip', 'install', name])

试试下面的方法。到目前为止,对我来说是最好的 首先安装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)
import os
os.system('pip install requests')

我尝试了上述临时解决方案,而不是更改docker文件。希望这些可能对一些人有用