Установите пакет и импортируйте в тот же скрипт Python - PullRequest
0 голосов
/ 30 октября 2019

(Правка: я сделал опечатку при написании этого вопроса: я поставил кавычку вокруг "pyparsing" в скрипте. Спасибо @dswdsyd)

При запуске скрипта python на целевой машине есть только стандартная библиотека python,Когда требуется пакет, я должен сначала установить его. Например, когда я попытался установить pyparsing и импортировать его:

subprocess.call([sys.executable, "-m", "pip", "install", "pyparsing"])    
import pyparsing

я получил ошибку:

ModuleNotFoundError: No module named 'pyparsing'

Так как установить и импортировать пакет в том же скрипте Python?

[Update:] При втором запуске скрипта пакет может быть импортирован. Странно.

Ответы [ 2 ]

1 голос
/ 30 октября 2019

По сути, вы передаете pyparsing как переменную вместо строки, чтобы исправить это изменение pyparsing на «pyparsing»

попробуйте это:

import subprocess
import sys
subprocess.call([sys.executable, "-m", "pip", "install", "pyparsing"])    
import pyparsing
0 голосов
/ 31 октября 2019

Проблема решена importlib.invalidate_caches(). Согласно документации importlib:

importlib.invalidate_caches ()

Делает недействительными внутренние кэши искателей, хранящиеся в sys.meta_path. Если искатель реализует invalidate_caches (), он будет вызван для выполнения аннулирования. Эта функция должна вызываться, если какие-либо модули создаются / устанавливаются во время работы вашей программы, чтобы гарантировать, что все искатели заметят существование нового модуля.

...