pipenv не показывает индикатор выполнения при установке пакетов

#python #pipenv #pipenv-install

#python #pipenv #pipenv-install

Вопрос:

Когда я пытаюсь установить пакеты с помощью pipenv, индикатор выполнения не отображается. Это очень важно для меня, поскольку у меня ограниченное подключение к данным, и мне нужно заранее знать размер загружаемых пакетов. Это пример того, что я получаю в pipenv

 pipenv install spacy
Installing spacy...
[   =] Installing spacy...  
 

Это то, что я получаю вместо этого при установке пакетов с обычным pip

 pip install spacy
Collecting spacy
  Downloading spacy-3.0.1-cp39-cp39-win_amd64.whl (11.4 MB)
     |████████████                    | 4.3 MB 2.2 MB/s eta 0:00:04
 

Есть ли какой-либо способ показать индикатор выполнения с помощью pipenv? Все остальные в таких вещах, как учебные пособия, могут показывать индикатор выполнения без дополнительного кода. Может ли быть так, что в новых версиях индикатор выполнения не отображается по умолчанию?

У меня есть какой-то способ определить размер пакета, я просто выполняю установку pip, проверяю размер, а затем немедленно прерываю, чтобы я мог перейти к установке pipenv

Ответ №1:

В настоящее время с помощью pipenv невозможно отобразить тот же индикатор выполнения загрузки, что и в pip. Это было запрошено ранее, еще в июле 2018 года, здесь: pipenv не удалось отобразить индикатор выполнения при загрузке пакета, и этот запрос функции все еще открыт.

Я имею в виду, иногда, когда мы хотим установить большой пакет pypi, такой как pytorch (pytorch’s.размер пакета whl составляет 400 Мб), а скорость интернета низкая (скажем, 400 КБ / с). В этой ситуации нам нужно подождать около 17 минут, чтобы завершить загрузку. В течение этого времени пользователь не может добавить в pipenv параметры для отображения скорости загрузки пакета или скорости завершения.

То, что я хочу, — это что-то вроде функции wget и индикатора выполнения pip.

Запросы на извлечение приветствуются, я согласен, что это была бы отличная функция

Так что, к сожалению, сейчас нет способа иметь ту же функциональность, что и у pip, pip или, по крайней мере, способа эмулировать --progress-bar опцию pip. Не стесняйтесь открывать эту тему и подписываться на эту проблему, чтобы получать обновления на случай, если она когда-нибудь будет реализована.

Все остальные в таких вещах, как учебные пособия, могут показывать индикатор выполнения без дополнительного кода. Может ли быть так, что в новых версиях индикатор выполнения не отображается по умолчанию?

Я думаю, вы путаете индикатор выполнения загрузки pip и индикатор выполнения pipenv и индикатор выполнения установки:

 $ pipenv install pytest
Installing pytest... 
⠏ Installing pytest...
...
Updated Pipfile.lock (34070a)!
Installing dependencies from Pipfile.lock (34070a)...
  🐍   ▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉▉ 1/1 —
 

pipenv install помимо установки пакетов выполняет множество других действий, таких как создание файла блокировки, обновление вашего Pip-файла и поддержка вашей виртуальной среды. Счетчик ( ⠏ Installing pytest... ) учитывает все эти операции и обычно требует времени для завершения. Панель установки в конце просто указывает что-то вроде «перемещение файлов из временных каталогов в вашу виртуальную среду» и не предоставляет никакой информации о размере и времени загрузки. Однако оба они не решают вашу проблему.

Это очень важно для меня, поскольку у меня ограниченное подключение к данным, и мне нужно заранее знать размер загружаемых пакетов.

Если вы устанавливаете пакеты из PyPI (по умолчанию), обходной путь — сначала перейти в раздел «Загрузка файлов» на странице PyPI пакета и проверить размеры загружаемых файлов. Вот один для spacy: https://pypi.org/project/spacy/#files .

На самом pip install деле сначала нужно загрузить те же файлы. Например, размеры файлов spacy-3.0.1-*.whl составляют около 11 ~ 12 МБ, что соответствует тому, что вы получаете за « spacy-3.0.1-cp39-cp39-win_amd64.whl (11.4 MB) «.

Другой обходной путь — сделать GET запрос к API JSON для этого пакета: https://pypi.org/pypi/spacy/json , и ищите releases > <version> > size .

 $ curl https://pypi.org/pypi/spacy/json > spacy.json
$ python3
>>> import json
>>> with open('spacy.json') as f:
...   data = json.load(f)
... 
>>> sizes = [v['size'] for v in data['releases']['3.0.1']]
>>> sizes
[12444769, 12750738, 11605145, 12283655, 12727469, 11606585, 12370380, 12851086, 11760155, 12176093, 12500325, 11395223, 7016311
 

что даст вам ту же оценку в 11 ~ 12 МБ. (Я не уделял много внимания сценарию, поэтому требуется много работы, чтобы превратить его в многоразовую утилиту, например pip-check-size <package> , или что-то в этом роде. Это также требует, чтобы вы заранее знали версию).

Оба этих обходных пути могут быть более сложными, чем то, что вы уже делаете сейчас:

Я просто выполняю установку pip, проверяю размер, а затем немедленно прерываю, чтобы перейти к установке pipenv

Комментарии:

1. Большое вам спасибо! Знаете ли вы, оставляет ли прерывание установки pip (с помощью Ctrl C) какие-либо файлы мусора? Или это полностью чистое прерывание, которое ничего не изменяет на вашем диске?

2. @Caerwin Хм, если вы собираетесь установить его pipenv сразу после, тогда должно быть нормально просто оставить все файлы pip , которые уже загружены / кэшированы, потому pipenv что вы можете использовать те же самые файлы, что сэкономит вам некоторые данные, потому что вам не нужно загружать их снова. Если вы действительно хотите, есть команда очистки кэша pip для очистки файлов, созданных во время установки. Однако очистка кэша будет означать повторное выполнение сетевых вызовов в будущем, что не сохранит данные. Итак, я говорю, оставьте их в покое, если вы не экономите место на диске.