我正在尝试从python脚本中安装一些python包,我正在使用pip.main(install)
。以下是代码段
try:
import requests
except:
import pip
pip.main(['install', '-q', 'requests==2.0.1','PyYAML==3.11'])
import requests
我尝试过从pip._internal导入main并使用pipmain而不是pip.main(),但它没有帮助。
我在pip version 9.0.1
和python 2.7
答案 0 :(得分:4)
pip开发人员不建议在程序中调用pip。 并且pip.main()方法已从pip v10中删除。 作为替代方法,建议在子进程中执行pip。
https://pip.pypa.io/en/stable/user_guide/?highlight=_internal#using-pip-from-your-program
try:
import requests
except:
import sys
import subprocess
subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'requests==2.0.1', 'PyYAML==3.11'])
import requests
答案 1 :(得分:2)
我遇到了同样的问题,只是运行下面的命令解决了它:
easy_install pip
答案 2 :(得分:0)
简短的回答是不要这样做。使用setup.py
或直接导入语句。
Here is why this doesn't work with pip and how to get around it if necessary.
pip
会影响整个环境。他们可能会或可能不想在他们运行您的脚本的环境中安装requests
,这取决于运行此版本的原因和原因。运行脚本会影响其python环境,这可能是一个令人讨厌的惊喜。
将其作为包安装(使用python setup.py
或pip install
)是另一回事。有一些完善的方法可以使用requirements.txt
和setup.py
安装其他软件包。预计安装包将安装其依赖项。 You can read more in the python.org packaging tutorials
如果您的脚本有依赖关系但人们不需要安装它,您应该在README.rst
和/或requirements.txt
中告诉他们。 或只需包含import语句,当他们收到错误时,他们就会知道该怎么做。让他们控制哪个环境安装哪个包。
答案 3 :(得分:0)
pip.main函数已移动,但pip开发人员未删除。这里投票最高的解决方案不好。当您可以直接运行python代码时,从python-> shell-> python并不是一个好习惯。尝试from pip._internal import main
,然后您就可以像以前一样使用该主要功能来执行pip调用。
答案 4 :(得分:0)
如果需要,您可以定义一个函数来安装lib。很方便。
#%%
# IMPORTS
import pip
def import_or_install(package):
try:
__import__(package)
except:
import sys
import subprocess
subprocess.check_call([sys.executable, '-m', 'pip', 'install', package])
__import__(package)
import_or_install("numpy")
import_or_install("matplotlib")
import numpy as np
import matplotlib.pyplot as plt
#%%
# Your code
print("Hello")