Этот вопрос должен быть или должен быть о том, как запустить pip из программы python. IDLE не имеет прямого отношения к этой версии quesiton.
Чтобы развернуть комментарий Дж. Дж. Хакалы: такая строка, как pip install pillow
, разбивается на пробелы, чтобы стать sys.argv
. Когда pip запускается как основной модуль, он вызывает pip.main(sys.argv[1:])
. Если один импортирует пип, можно позвонить pip.main(arg_line.split())
, где arg_line
является частью командной строки после pip
.
Прошлый сентябрь (2015 г.) Я экспериментировал с использованием этого непреднамеренного API из другой программы python и сообщил о начальных результатах по проблеме трекера 23551. Затем были обсуждены и дальнейшие результаты.
Проблема с выполнением нескольких команд в одном процессе заключается в том, что некоторые команды команд кэшируют не только sys.path, который обычно остается постоянным, но также и список установленных пакетов, который обычно изменяется. Поскольку pip предназначен для запуска одной команды для каждого процесса, а затем выхода, он никогда не обновляет кеш. Когда pip.main используется для запуска нескольких команд в одном процессе, команды, заданные после кэширования, могут использовать устаревший и не более корректный кеш. Например, list
после install
показывает, как было before the install.
Вторая проблема для программы, которая хочет изучить вывод из пипа, заключается в том, что он переходит к stdout и stderr. Я разместил program, который захватывает эти потоки в программные переменные как часть запущенного пипа.
Использование вызова подпроцесса для каждой команды pip, как предложено L_Pav, хотя и менее эффективно, решает обе проблемы. Метод communicate
делает выходные потоки доступными. См. Подпроцесс doc.
Попробуйте 'pip.main ([" install "," --user "," somepackagenamehere "])' например. –