Чтобы установить пакеты Python из-за корпоративного прокси-сервера, иногда необходимо добавлять опции в pip
, например --proxy
или --cert
.
Как указать прокси-сервер в PyCharm, объясняется в этом вопросе и как добавить любой параметр в вызов pip
объясняется в этом ответе.
Последний позволит мне добавить необходимый параметр --cert
. К сожалению, это работает только при установке пакета вручную и не распространяется на случай, когда у меня есть файл requirements.txt
и вы хотите, чтобы PyCharm автоматически установил перечисленные пакеты. Это приводит к ошибке:
Повторить попытку (повторить попытку (итого = 4, connect = None, read = None, redirect = None, status = None)) после того, как соединение сломано с помощью команды SSLError (SSEYrror (1, '[SSL: CERTIFICATE_VERIFY_FAILED]) (_ssl.c: 833) '),)': /simple/robotframework/
Это означает, что мне нужно добавить что-то к базовому вызову pip
(--cert
в моем случае).
Вопрос: Как указать параметры pip
, которые будут использоваться PyCharm для автоматической установки пакетов, указанных в файле requirements.txt
?
Вы можете загрузить сертификат CA, вставленный корпоративным брандмауэром, и установить его в хранилище ключей pip. Ниже описан процесс, который я использовал, но я уверен, что те, кто более опытен в форматах/манипулировании сертификатами, могут улучшить его:
ПОЖАЛУЙСТА, ОБРАТИТЕ ВНИМАНИЕ: Файл pip cacerts.pem будет перезаписываться при каждом обновлении pip, поэтому сертификат компании необходимо будет повторно вставить.
Шаг 1 Определите правильный склад ключей. Если вы используете виртуальную среду, расположение хранилища ключей, используемого pip при его активации, должно быть C:\PATH\TO\VENV\Lib\site-packages\pip\_vendor\certifi\cacert.pem
ПРИМЕЧАНИЕ. В отличие от большинства хранилищ ключей, с которыми я имел дело (в основном при попытке заставить продукты JetBrains работать за корпоративными брандмауэрами), это простой текст. Подробнее об этом в шаге 3.
Шаг 2 Загрузите сертификат. Используя Firefox (есть много способов сделать это), перейдите по URL, предшествующему ошибке (что-то вроде https://pypi.org/simple/ или https://pypi.python.org/simple/). Нажмите на замок> Показать сведения о соединении> Дополнительная информация. В окне Информация о странице нажмите Просмотр сертификата> Вкладка "Сведения". Экспортируйте сертификат верхнего уровня как .crt/.pem. Вернитесь на вкладку Общие, это может понадобиться на шаге 3.
Шаг 3 Обычно вы можете просто использовать команду keytool -import -alias key-alias -file "C:\path\to\exported\key.der" -keystore "C:\Path\to\keystore\.PyCharm2018.3\system\tasks\cacerts"
например keytool -import -alias key-alias -file "C:\path\to\exported\key.der" -keystore "C:\Path\to\keystore\.PyCharm2018.3\system\tasks\cacerts"
, но при этом вы получаете следующую ошибку keytool: java.security.KeyStoreException: нераспознанный формат хранилища ключей: ноль. Оказывается, вы можете просто скопировать сертификат простого текста, экспортированный на шаге 2, прямо в хранилище ключей.
Вам не нужно включать какую-либо информацию заголовка, просто от -----BEGIN CERTIFICATE----- до -----END CERTIFICATE-----. Однако в будущем может оказаться полезным, если кто-то (вы) снова захочет просмотреть это хранилище ключей, поэтому вы можете скопировать его с вкладки "Общие", упомянутой выше.