Вопрос или проблема
У меня была такая же ошибка, как у twine upload TypeError, и я проверил свою версию twine, чтобы выяснить, что это 1.10.
$ twine --version
twine version 1.10.0 (pkginfo: 1.2.1, requests: 2.18.4, setuptools:
39.2.0, requests-toolbelt: 0.8.0, tqdm: 4.19.5)
Однако с помощью pip list я обнаружил, что версия twine — 1.11.
$ pip list
...
twine 1.11.0
...
Я попробовал:
$ sudo apt-get install --only-upgrade twine
(см. здесь)
и обнаружил, что twine уже является последним выпуском (1.10.0-1) и не удалось обновить до 1.11.
twine находится здесь:
$ which twine
/usr/bin/twine
Как я могу обновить twine?
Когда вы устанавливаете пакеты через apt-get
, устанавливается любая упакованная версия, а не последняя версия с upstream.
Для получения twine в форме pip
, сначала необходимо удалить twine
, установленный из репозиториев, а затем использовать pip
/pip3
для установки.
sudo apt-get remove twine
sudo pip3 install twine
Если вторая команда говорит pip3: not found
, попробуйте использовать просто pip
вместо pip3
.
Это должно установить версию из репозиториев PyPi. Возможно, вам нужно будет закрыть и открыть заново сеанс терминала, чтобы новая версия Twine была распознана. (Это при условии, что версия Twine с pip
помещает исполняемый файл в расположение в вашей переменной окружения PATH
; если нет, это потребует дополнительных действий, чтобы это работать так же, как упакованная версия twine
.)
Я только что столкнулся с этой проблемой на Ubuntu 24.04. Пытался упаковать что-то с hatchling
, но это было невозможно. Однако в этом выпуске решение, предложенное Томасом Уордом, не применимо, так как использование менеджеров пакетов ad hoc больше не разрешено:
$ sudo pip3 install twine
error: externally-managed-environment
× This environment is externally managed
╰─> To install Python packages system-wide, try apt install
python3-xyz, where xyz is the package you are trying to
install.
If you wish to install a non-Debian-packaged Python package,
create a virtual environment using python3 -m venv path/to/venv.
Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make
sure you have python3-full installed.
If you wish to install a non-Debian packaged Python application,
it may be easiest to use pipx install xyz, which will manage a
virtual environment for you. Make sure you have pipx installed.
See /usr/share/doc/python3.12/README.venv for more information.
note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
Поэтому сборка и упаковка должны выполняться из виртуального окружения:
sudo apt purge twine
python3 -m venv env-build
source env-build/bin/activate
pip3 install build twine
Ответ или решение
Обновление программного обеспечения является важной частью управления ИКТ-средой, позволяя устранить ошибки, повысить функциональность и безопасность. Рассмотрим, как обновить Twine до версии 1.11, учитывая проблемы, описанные в вашем вопросе.
Теоретическая часть
Прежде чем углубляться в практические шаги, важно понять, какие типы пакетов существуют в Linux и как они устанавливаются. Существует два основных метода управления пакетами на базе Linux: использование системных пакетов и управление пакетами Python.
-
Системные пакеты (установленные через
apt-get
илиapt
) обычно доступны в репозиториях вашей ОС. Эти пакеты могут быть немного устаревшими, так как проходят тщательный процесс тестирования перед включением в дистрибутивы. Это объясняет, почему у вас установлена версия Twine 1.10 черезapt-get
. -
Пакеты Python управляются с помощью
pip
, который взаимодействует с репозиторием Python Package Index (PyPI). Это позволяет получать последние версии пакетов, независимые от системных репозиториев.
Пример
В вашем случае apt-get
не позволяет обновить Twine до версии 1.11, поскольку эта версия еще не прошла проверку в репозитории вашей системы. Вместо этого в pip list
вы видите, что Twine версии 1.11 доступен, что подтверждает его наличие в репозитории PyPI.
При попытке обновления вы столкнулись с externally-managed-environment
ошибкой, которая возникает, когда pip
не может модифицировать системный Python из-за политики вашего дистрибутива (начиная с версии Ubuntu 22.04 и выше). Это требование нацелено на предотвращение конфликтов между системными пакетами и пакетами Python. Поэтому вам предложено пользоваться виртуальными окружениями.
Применение
Удаление системного пакета Twine
Первым шагом является удаление Twine, установленного через apt-get
, поскольку его присутствие создает путаницу с версиями:
sudo apt-get remove twine
Создание виртуального окружения
В Linux рекомендуется использовать виртуальные окружения для изоляции пакетов Python. Это предотвращает конфликты и облегчает управление зависимостями:
-
Убедитесь, что у вас установлен
python3-venv
. Если нет, установите его:sudo apt-get install python3-venv
-
Создайте новое виртуальное окружение:
python3 -m venv env-build
-
Активируйте виртуальное окружение:
source env-build/bin/activate
Установка Twine через pip
Теперь, когда ваше окружение настроено и изолировано, используйте pip
для установки обновленной версии Twine:
pip install twine
Вы также можете установить дополнительные инструменты, такие как build
, если это необходимо для вашего проекта:
pip install build
Последние версии будут установлены без конфликтов с системой.
Проверка версии
Проверьте установленную версию Twine:
twine --version
Убедитесь, что версия 1.11 успешна установлена и готова к использованию.
Возможные проблемы и их решение
-
Проблема PATH: Убедитесь, что ваше виртуальное окружение активно, когда вы выполняете команды, так как может возникнуть путаница в PATH, и система будет по умолчанию использовать старую версию Twine.
-
Зависимости: Если возникают проблемы с зависимостями, вы можете воспользоваться командой:
pip install --upgrade pip setuptools wheel
Это обновит основные инструменты установки, что может решить возникающие проблемы.
Завершение
После завершения работы, не забудьте деактивировать виртуальное окружение, если оно больше не нужно:
deactivate
Эти шаги помогут вам успешно обновить Twine до версии 1.11, избегая при этом конфликтов с системными пакетами и реализациями. Такой подход позволит вам эффективно управлять средой Python и использовать последние версии инструментов для разработки и развертывания Python-проектов.