Мне нужно установить пакет из PyPi прямо в мой script.
Может быть, есть модуль или функция distutils
(distribute
, pip
и т.д.), Которая позволяет мне просто выполнить что-то вроде pypi.install('requests')
, и запросы будут установлены в мой virtualenv.
Установка модуля python в код
Ответ 1
Вы также можете использовать что-то вроде:
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')
Ответ 2
Решение Rickard не поддерживается командой разработчиков пипа и в некоторых случаях приводит к сбою (например, многопоточность). Кроме того, начиная с pip 10, код был перемещен в pip._internal
, чтобы прояснить, что это не поддерживается. Таким образом, это решение завершится ошибкой с ошибкой импорта "pip> = 10.0.0".
Квантовое решение является предпочтительным способом решения проблемы, однако его реализация не гарантирует, что он вызовет правильный пункт.
Это решение гарантирует, что оно вызывает точку интерпретатора Python, выполняющего код.
import subprocess
import sys
def install(package):
subprocess.call([sys.executable, "-m", "pip", "install", package])
Он делает то же самое, что и решение Quantum, однако вместо непосредственного запуска pip он запускает тот же исполняемый файл python, на котором выполняется код, и указывает ему выполнить модуль pip, который он установил, и передает ему остальные аргументы.
Ответ 3
Если вы хотите использовать 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')
Если вы установили пакет в качестве пользователя, вы можете столкнуться с проблемой, что вы не можете просто импортировать пакет. Подробнее см. Как обновить sys.path?.
Ответ 4
Это должно работать:
import subprocess
def install(name):
subprocess.call(['pip', 'install', name])
Ответ 5
Вы определяете зависимый модуль внутри setup.py вашего собственного пакета с опцией "install_requires".
Если ваш пакет должен иметь созданную консоль script, то вы можете использовать точку входа "console_scripts", чтобы создать оболочку script, которая будет размещена в папке "bin" (например, вашей виртуальной среды).
Ответ 6
Я надеюсь, что этот вопрос все еще действует. Я сделал что-то вроде этого:
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 может быть записан и в другой части блока первой попытки, однако в моем заявлении о проблемах я должен написать два отдельных блока.
Ответ 7
Вот как я устанавливаю все пакеты для своих проектов.
Просто добавьте все имена в список и выполните его перед запуском основного кода.
Сочетание этого с использованием "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)
Ответ 8
Я думаю, что это может быть проще, используя os.system
from os import system
package = # the name of the package
system('pip install %s' % package)
Ответ 9
Для меня это работает (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()
Ответ 10
я добавил некоторую обработку исключений в ответ @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
Ответ 11
Я предполагаю, что у нас есть пункт на нашей машине, и мы попытаемся поймать определенную зависимость, которая отсутствует... попробуйте этот метод и дайте мне знать, что вы думаете.
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()
Ответ 12
Вы можете установить с помощью sys-модуля хорошо
import sys
!{sys.executable} -m pip install <package> --user
Ответ 13
Я использую os.system
для эмуляции терминала os, импортирующего модуль, потому что тогда вы можете использовать модуль во всех других сценариях.
Например, я создаю Game Engine, который работает с отдельными сценариями, добавленными вместе, большинство этих скриптов используют Pygame, и если у пользователя нет pygame, файл запуска добавит его с помощью этого кода:
import os
os.system('pip install pygame')
К сожалению, я не знаю, как получить pip на пользовательской машине, так что это зависит от пользователя, имеющего пип.
Ответ 14
Поскольку импортируемый 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
первый
> 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
вы всегда можете скачать
import os
затем верните все команды терминала, чтобы загрузить их оттуда.
как
while True:
code = input("")
os.system("code")
что бы это ни было, я не уверен, но если вы даже не знаете, как это сделать в терминале, как вы собираетесь делать это на python.