Я пытаюсь понять, как правильно использовать python3.8 -m pip install
для установки требований из requirements.txt
И одновременно устанавливать определенные пакеты из локальной файловой системы, а не из репозитория. У нас есть несколько разных частных репозиториев, над которыми нам, возможно, придется работать одновременно для более крупных изменений.
Я обнаружил, что могу сделать это как две отдельные команды. Сначала python3.8 -m pip install -r requirements.txt --index-url https://private/repo/dependency/simple
, а потом python3.8 -m pip install path/to/dependency
. Но я бы хотел объединить их в одну команду, если это возможно. Это позволит избежать необходимости генерировать токены доступа и управлять ими как часть URL-адреса индекса для каждого разработчика.
Я думаю, вы можете попробовать напрямую указать свой путь в своем requirements.txt
так:
# Packages
package1==X.0.0
package2==X.0.0
# Local Packages
/path/to/local/dependency1
Возможно, вы сможете создать новый requirements.txt
и запустить его в той же строке:
В PowerShell:
cat requirements.txt > myRequirements.txt
echo path/to/dependency >> myRequirements.txt
python3.8 -m pip install -r myRequirements.txt
В большинстве оболочек Unix что-то вроде
printf '%s\n' \
'-r requirements.txt' \
'path/to/dependency' >myRequirements.txt
pip install -r myRequirements.txt
Если вы настаиваете на создании однострочной строки, вы можете заменить каждую обратную косую черту ничем, а каждую оставшуюся новую строку - точкой с запятой ;
Основная идея хороша, но в деталях есть несколько ошибок. Попробуйте printf '%s\n' '-r requirements.txt' 'path/to/local' >myRequirements.txt
нет, ошибок в коде нет
Это пшш, если ты сомневаешься
Это создаст одну строку, которая не является допустимым форматом requirements.txt
. .\
— это ошибка на любой платформе, отличной от Windows, и в любом случае она совершенно не нужна.
да, ты прав насчет .\ я его модифицирую
Он по-прежнему создает файл только с одной строкой.
Нет, это невероятно говорить такое. Откройте PowerShell и введите echo one two > test.txt
Сейчас cat test.txt
. вы увидите 2 строки
окей, на самом деле ты прав, в классическом bash все по-другому, там всего одна строка.
«классический bash», и ash, и Dash, и ksh, и zsh, и вообще все остальное, кроме powershell. Пользователи Windows составляют здесь меньшинство; вы не можете предполагать, что у всех вообще есть powershell.
и ? Я на пшш и дал понять с самого начала
Нет, в вашем ответе Powershell вообще не упоминается.
пожалуйста, вы ответили на комментарий, а не на основной ответ, где я четко упоминаю, что нахожусь под pwsh. В любом случае, в следующий раз, когда я захочу кому-то помочь, я постараюсь быть более откровенным, это был мой первый вклад в стек. В любом случае, хорошего дня тебе
Вы можете редактировать свои ответы, чтобы улучшения не пришлось ждать до следующего раза. Было бы неплохо указать «in powershell:» перед существующим сегментом кода. Добавление отдельного раздела «в других оболочках:» было бы еще лучше.
Я сделаю это, спасибо
pip
позволяет вам указать несколько пакетов.
pip install path/to/local/package1 \
path/to/another/package2 \
-r requirements.txt
Если path/to/local/package1
переопределяет пакет, который также упоминается в requirements.txt
, Pip предпочтет пакет, указанный ранее в командной строке, а затем просто придет к выводу, что требование уже выполнено, как только он снова найдет его в requirements.txt
.
Проблема в том, что дополнительная зависимость (по крайней мере, на данный момент) находится в файле требований.txt. Если я просто подготовлю его, как вы это сделали здесь, он все равно отправится в репозиторий, чтобы получить его при обработке документа с требованиями. Если я не включу параметр --index-url
, пакет не удастся установить. И я хочу, чтобы это присутствовало в документе с требованиями; Я просто хочу иногда переопределить, откуда его тянет.
Это не мой опыт. Если я передам --index-url
, то индекс будет загружен, но локальный пакет, явно указанный с его дисковым путем, будет иметь приоритет над неустановленным пакетом в индексе. Если пакет уже был установлен по другим причинам, это может объяснить то, что вы видите.
Хм. Есть ли способ проверить из командной строки pip, откуда был загружен данный установленный пакет? Я беру проект у бывшего коллеги, но с Python я особо не разбирался :P
Неважно — я смог подтвердить, что этот подход работает для меня :)
Я не думаю, что pip
записывает, откуда пришла посылка. Если у вас есть журналы мероприятия, они должны включать эту информацию.
Я бы предпочел не изменять файл требований.txt, если это возможно, но это хороший запасной метод.