Вопрос-Ответ

How can I Install a Python module within code?

Как я могу установить модуль Python в коде?

Мне нужно установить пакет из PyPI прямо в мой скрипт.

Может быть, есть какой-нибудь модуль или distutils (distribute, pip и т.д.) Функция, которая позволяет мне просто выполнять что-то вроде pypi.install('requests') и запросы будут установлены в мой virtualenv?

Переведено автоматически
Ответ 1

Официально рекомендуемый способ установки пакетов из скрипта - это вызов интерфейса командной строки pip через подпроцесс. Большинство других ответов, представленных здесь, не поддерживаются pip. Кроме того, начиная с версии pip 10, весь код был перенесен в pip._internal именно для того, чтобы пользователям было ясно, что программное использование pip запрещено.

Используйте sys.executable, чтобы гарантировать, что вы вызовете тот же самый модуль, pip связанный с текущей средой выполнения.

import subprocess
import sys

def install(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])
Ответ 2

Вы также можете использовать что-то вроде:

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')
Ответ 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([sys.executable, '-m', 'pip', 'install', name])
python pip