我需要在我的脚本中直接从PyPi安装一个包。也许有一些模块或distutils
(distribute
,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')
您可以使用sys模块安装
import sys
!{sys.executable} -m pip install <package> --user
我使用os.system
模拟导入模块的操作系统终端,因为这样,您可以在所有其他脚本中使用该模块。
例如,我正在创建一个游戏引擎,它运行在单独添加的脚本上,大多数脚本都使用Pygame,如果用户没有pygame,启动文件将使用以下代码添加它:
import os
os.system('pip install pygame')
不幸的是,我不知道如何将pip放到用户的机器上,因此这取决于用户的pip。
由于可导入的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。
1厘米
> Download
> https://github.com/GeoNode/geonode-win-installer/blob/master/python_deps/pip-9.0.1-py2.py3-none-any.whl
第2
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
你可以随时下载
import os
然后右键所有终端命令从那里下载它。
喜欢
while True:
code = input("")
os.system("code")
不管它是什么我不确定,但如果你甚至不知道如何在终端中做到这一点你将如何在python中做到这一点。
pip开发团队不支持Rickard的解决方案,并且在某些情况下会崩溃(例如多线程)。此外,由于pip 10代码已被移动到pip._internal
以便明确表示不支持,因此该解决方案将因“pip> = 10.0.0”上的导入错误而失败。
Quantum的解决方案是解决问题的首选方法,但是他的实现并不能保证它会调用正确的点。
这个解决方案保证它调用运行代码的python解释器的pip。
import subprocess
import sys
def install(package):
subprocess.call([sys.executable, "-m", "pip", "install", package])
它与Quantum的解决方案相同,但它不是直接运行pip,而是运行运行代码的相同python可执行文件,并告诉它执行它已安装的pip模块并将其余参数传递给它。
如果要使用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?。
这应该工作:
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
您可以使用“install_requires”选项在自己包的setup.py中定义依赖模块。
如果您的包需要生成一些控制台脚本,那么您可以使用“console_scripts”入口点来生成一个包装脚本,该脚本将放在'bin'文件夹中(例如您的virtualenv环境)。
我希望这个问题仍然有效。我做了以上这样的事情:
import sys
import os
import site
try:
import pip
except ImportError:
print "installing pip"
cmd = "sudo easy_install pip"
os.system(cmd)
reload(site)
try:
import requests
except ImportError:
print "no lib requests"
import pip
cmd = "sudo pip install requests"
print "Requests package is missing\nPlease enter root password to install required package"
os.system(cmd)
reload(site)
第二个try块也可以写在第一个try块的else部分,但是在我的问题语句中我必须写两个单独的块。
这就是我为我的项目安装所有包的方法。
只需将所有名称添加到列表中,然后在运行主代码之前执行一个名称。
结合使用“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)
我假设我们的机器上有一个点,并且会尝试捕获一个缺少的特定依赖项。尝试这种方法并让我知道你的想法。
import os
try:
import something
.....
.....
except ImportError as e:
pip = lambda : os.system('pip install' + str(e)[15:])
pip()
此外,如果使用pip
函数应用“自我感知”导入器机制,请考虑使用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()
对我来说,这是有效的(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()