Установка модуля python в коде
мне нужно установить пакет из PyPi прямо в моем скрипте.
Может есть какой-то модуль или distutils
(distribute
,pip
etc. функция), которая позволяет просто выполнить что-то вроде pypi.install('requests')
и запросы будут установлены в мой virtualenv.
10 ответов:
вы также можете использовать что-то вроде:
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')
Если вы хотите использовать
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.путь? для получения дополнительной информации.
решение Rickard не поддерживается командой разработчиков pip и в некоторых случаях приведет к сбою (например, многопоточность). Кроме того, начиная с pip 10 код был перемещен в
pip._internal
чтобы было ясно, что это не поддерживается, это решение, таким образом, завершится ошибкой импорта на "pip>=10.0.0".решение Quantum является предпочтительным способом решения проблемы, однако его реализация не гарантирует, что он вызовет правильный pip.
это решение гарантирует, что он вызывает pip интерпретатора python, выполняющего код.
import subprocess import sys def install(package): subprocess.call([sys.executable, "-m", "pip", "install", package])
Он делает то же самое, что и решение Quantum, однако вместо прямого запуска pip он запускает тот же исполняемый файл python, который запускает код, и сообщает ему выполнить установленный модуль pip и передает ему остальные аргументы.
вы определяете зависимый модуль внутри setup.py вашего собственного пакета с опцией "install_requires".
Если ваш пакет должен иметь некоторый консольный скрипт, то вы можете использовать точку входа "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, но в моей постановке задачи я должен написать два отдельных блока.
Я предполагаю, что у нас есть типун на нашей машине, и будет пытаться поймать конкретную зависимость, которая отсутствует.. попробуйте этот метод и дайте мне знать, что вы думаете.
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()
вы можете установить с помощью модуля sys колодец
import sys !{sys.executable} -m pip install <package> --user
Я использую
os.system
для эмуляции терминала ОС, импортирующего модуль, потому что тогда вы можете использовать модуль во всех других сценариях.например, я создаю игровой движок, который работает на отдельных сценариях, добавленных вместе, большинство из этих сценариев используют Pygame, и если у пользователя нет pygame, файл запуска добавит его с помощью этого кода:
import os os.system('pip install pygame')
к сожалению, я понятия не имею, как получить pip на машине пользователя, так что это зависит от пользователя, имеющего очко.