我需要在我的脚本中直接从PyPi安装一个包。
也许有一些模块或distutils
(distribute
,pip
等)功能允许我执行类似pypi.install('requests')
的操作,并且请求将安装到我的virtualenv中。
答案 0 :(得分:333)
您还可以使用以下内容:
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')
答案 1 :(得分:94)
pip._internal
以便明确表示不支持此代码,因此此解决方案将因“pip> = 10.0.0”导入错误而失败。
昆腾的解决方案是解决问题的首选方法,但是他的实施并不能保证它会调用正确的点。
这个解决方案保证它调用运行代码的python解释器的pip。
import subprocess
import sys
def install(package):
subprocess.call([sys.executable, "-m", "pip", "install", package])
它与Quantum的解决方案相同,但它不是直接运行pip,而是运行运行代码的相同python可执行文件,并告诉它执行它已安装的pip模块并将其余参数传递给它。
答案 2 :(得分:67)
如果您想使用pip
安装所需的软件包并在安装后导入它,您可以使用以下代码:
def install_and_import(package):
import importlib
try:
importlib.import_module(package)
except ImportError:
import pip
pip.main(['install', package])
finally:
globals()[package] = importlib.import_module(package)
install_and_import('transliterate')
如果您以用户身份安装了软件包,则可能会遇到无法导入软件包的问题。有关其他信息,请参阅How to refresh sys.path?。
答案 3 :(得分:17)
这应该有效:
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
答案 4 :(得分:7)
使用“install_requires”选项在自己包的setup.py中定义依赖模块。
如果你的包需要生成一些控制台脚本,那么你可以使用“console_scripts”入口点来生成一个将被放置的包装脚本 在'bin'文件夹中(例如你的virtualenv环境)。
答案 5 :(得分:3)
我希望这个问题仍然有效。 我做了以上这样的事情:
check3 = false
第二个try块也可以写在第一个try块的else部分,但是在我的问题语句中我必须写两个单独的块。
答案 6 :(得分:2)
我在@Aaron的答案中添加了一些异常处理。
import subprocess
import sys
try:
import pandas as pd
except ImportError:
subprocess.call([sys.executable, "-m", "pip", "install", 'pandas'])
finally:
import pandas as pd
答案 7 :(得分:2)
要安装多个软件包,我正在使用带有以下代码的setup.py文件:
import sys
import subprocess
import pkg_resources
required = {'numpy','pandas','<etc>'}
installed = {pkg.key for pkg in pkg_resources.working_set}
missing = required - installed
if missing:
# implement pip as a subprocess:
subprocess.check_call([sys.executable, '-m', 'pip', 'install',*missing])
答案 8 :(得分:1)
我假设我们的机器上有一个点子,并且会尝试捕捉一个缺少的特定依赖...试试这个方法让我知道你的想法。
import os
try:
import something
.....
.....
except ImportError as e:
pip = lambda : os.system('pip install' + str(e)[15:])
pip()
另外,
如果使用pip
函数来应用&#34;自我意识&#34;请考虑使用lambda
模块本身进口商机制。只需按照以下代码片段:))
try:
import somthing
..........
..........
except ImportError as e:
# importing pip module to handle pip functionalites
import pip
# create a lambda that import using pip by module_error_name=e[15:]
installer = lambda : pip.main(['install', str(e)[15:])
# create a lambda that import a module by linear_lambda_call
importer = lambda x : __import__(str(x)).import_module()
# install the module
installer()
# import the module
importer()
答案 9 :(得分:1)
这就是我为项目安装所有软件包的方式。
只需将所有名称添加到列表中并执行,然后再运行主代码即可。
将其与“ venv”结合使用非常棒!
"""call this module to setup your python packages via pip"""
from pip._internal import main as pip
pip_install_argument = "install"
# packages to install
packages_to_install = [
"numpy", # math magic 1
"scipy", # math magic 2
]
def install(packages):
"""installes given packages via pip
Args:
package names as list
Returns:
None
"""
global pip_install_argument
for package in packages:
pip([pip_install_argument, package])
if __name__ == '__main__':
install(packages_to_install)
答案 10 :(得分:1)
对我来说,这可行(python 2.x),假设所有要求都在requirements.txt
中定义:
def pip_auto_install():
"""
Automatically installs all requirements if pip is installed.
"""
try:
from pip._internal import main as pip_main
pip_main(['install', '-r', 'requirements.txt'])
except ImportError:
print("Failed to import pip. Please ensure that pip is installed.")
print("For further instructions see "
"https://pip.pypa.io/en/stable/installing/")
sys.exit(-1)
except Exception as err:
print("Failed to install pip requirements: " + err.message)
sys.exit(-1)
pip_auto_install()
答案 11 :(得分:1)
试试下面的。到目前为止对我有用的最好的 先安装 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)
答案 12 :(得分:0)
您可以使用sys模块安装
import sys
!{sys.executable} -m pip install <package> --user
答案 13 :(得分:0)
我使用os.system
模拟导入模块的操作系统终端,因为这样,您可以在所有其他脚本中使用该模块。
例如,我正在创建一个游戏引擎,它运行在一起添加的单独脚本上,大多数脚本都使用Pygame,如果用户没有pygame,启动文件将使用以下代码添加它:
import os
os.system('pip install pygame')
不幸的是,我不知道如何将pip放到用户的机器上,因此这取决于用户的pip。
答案 14 :(得分:0)
由于可导入的pip模块并非始终有效,因此存在更可靠的方法:
def PackageInstall(error):
'''
Finds out which package is missing and downloads it automatically after five seconds.
Use example:
try:
import numpy as np
import matplotlib.pyplot as plot
except ImportError as error:
PackageInstall(error)
'''
import time, subprocess, os, sys
lib = str(error)[15:].replace('\'', '')
print('>>>',str(error))
print('>>> Download will start after five seconds')
time.sleep(5)
subprocess.call("pip install " + lib)
print('>>> Restarting')
os.startfile(__file__)
sys.exit()
这适用于Windows。
答案 15 :(得分:0)
第一
> Download
> https://github.com/GeoNode/geonode-win-installer/blob/master/python_deps/pip-9.0.1-py2.py3-none-any.whl
第二
extract .whl file and; use winRar
copy extracted file and paste sitepackage [or python module container]
files are.. pip and pip-19.0.3.dist-info
第三
import pip
pip.main(['install','scpy'])
scpy or any package you want to install
答案 16 :(得分:0)
import os
os.system('pip install requests')
我在上面尝试了临时解决方案,而不是更改docker文件。希望这些对某些人有用
答案 17 :(得分:0)
如果您想要一个扩展 subprocess.check_call
的更有效的答案。您可以先使用 pkg_resources
检查是否已满足要求。
这适用于不同的 requirment specifiers,这很好。例如>=
、==
import sys
import subprocess
import pkg_resources
from pkg_resources import DistributionNotFound, VersionConflict
def should_install_requirement(requirement):
should_install = False
try:
pkg_resources.require(requirement)
except (DistributionNotFound, VersionConflict):
should_install = True
return should_install
def install_packages(requirement_list):
try:
requirements = [
requirement
for requirement in requirement_list
if should_install_requirement(requirement)
]
if len(requirements) > 0:
subprocess.check_call([sys.executable, "-m", "pip", "install", *requirements])
else:
print("Requirements already satisfied.")
except Exception as e:
print(e)
示例用法:
requirement_list = ['requests', 'httpx==0.18.2']
install_packages(requirement_list)
答案 18 :(得分:-10)
你总是可以下载
test
然后右键所有终端命令从那里下载。
像
import os
无论是什么,我都不确定,但如果你甚至不知道如何在终端中做到这一点你将如何在python中做到这一点。