1

Я использую Python на своем компьютере Fedora KDE (x64). Раньше у меня была Fedora 25, и я установил Python 3.5 с помощью sudo dnf install python3 и нескольких пакетов, таких как numpy и scipy с помощью таких команд, как sudo dnf install python3-numpy . Теперь не все подходящие пакеты или версии были доступны в репозиториях fedora, поэтому я установил их в ~/.local/lib/python3.5/site-packages/ через pip3 install <packagename> --user .

Перемотка вперед, и я обновил Fedora до версии 28, во время которой python3 был обновлен до версии 3.6. Все остальные пакеты python3-* также были соответствующим образом обновлены. Теперь pip3 не распознает какие-либо установленные пользователем пакеты, как в pip3 list --user , и вообще не возвращает никакого вывода. Но ~/.local/lib/python3.5/site-packages/ все еще существует и содержит несколько пакетов.

Теперь я не уверен, что я должен делать ....

  • Может быть, я могу удалить содержимое site-packages , если бы я точно знал, что можно удалить? Затем я могу приступить к повторному исследованию того, какие пакеты действительно нужно установить через pip.
  • Я могу переименовать ~/.local/lib/python3.5 в ~/.local/lib/python3.6?
  • Какой-нибудь другой способ заставить pip импортировать содержимое старых установленных пользователем пакетов python?

Я как бы растерялся, как поступить.

1 ответ1

0

Это должно быть довольно легко сделать, если у вас все еще есть Python 3.5:

$ pip3.5 list --user --format=freeze | xargs pip3.6 install --user

переустановит все пакеты пользовательского сайта для Python 3.6. Ситуация становится немного сложнее, когда старая установка Python исчезает (так что в вашем случае нет pip3.5 ), но все равно ничего, с чем вы не можете справиться. Прежде всего, убедитесь, что пользовательский сайт все еще существует, поэтому вам есть с чем работать:

$ find ~/.local -type d -name "site-packages" | grep python3.5
/Users/hoefling/.local/lib/python3.5/site-packages

Теперь используйте pkg_resources чтобы перечислить дистрибутивы, доступные на этом сайте пользователя:

$ find ~/.local -type d -name "site-packages" | grep python3.5 | xargs python3.6 -c "import pkg_resources, sys; print(' '.join((f'{pkg.project_name}=={pkg.version}' for pkg in pkg_resources.find_distributions(sys.argv[1]))))"
wheel==0.30.0

Пользовательский каталог сайта будет передан в строку кода Python, которая будет сканировать каталог с помощью функции pkg_resources.find_distributions (см. Раздел « Получение или создание дистрибутивов » в документации), которая является той же самой, которую pip использует под капотом IIRC. Я только добавил немного форматирования, чтобы вы могли затем передать вывод новому pip3.6 в последней итерации расширения однострочного. Полный однострочный:

$ find ~/.local -type d -name "site-packages" | grep python3.5 | xargs python3.6 -c "import pkg_resources, sys; print(' '.join((f'{pkg.project_name}=={pkg.version}' for pkg in pkg_resources.find_distributions(sys.argv[1]))))" | xargs pip3.6 install --user

pkg_resources является частью пакета setuptools и должна быть уже предустановлена (по крайней мере, так обстоит дело при использовании установщиков из https://www.python.org/downloads/). Если нет, сначала установите setuptools :

$ dnf install python3-setuptools

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .