Python setup.py для переопределения установленной версии

У меня есть пакет, который я разрабатываю. Этот пакет уже установлен как файл яйца, который помещен в каталог сайтов-пакетов, путь яйца добавлен в easy-install.pth.

Теперь я понял, что у меня есть ошибка в пакете, поэтому я вызвал python setup.py develop, чтобы подключить каталог разработки. Путь исходного каталога правильно добавлен в easy-install.pth, но он добавлен последним, что означает, что уже установленное яйцо будет выбрано и импортировано сначала, когда я выпущу import mypackage.

Как я могу заставить крючок разработки переопределить уже установленный пакет?

В конце концов, если я ошибаюсь, объясните, какая правильная стратегия для решения этого варианта использования.

Ответы

Ответ 1

Если вы используете pip,

sudo pip uninstall packagename

предложит все пакеты, которые находятся в easy-install.pth, и удалите их все после подтверждения.

Затем вы можете сделать setup.py develop, чтобы только ветвь разработки находилась в пути python.

Если вам нужны несколько версий одной и той же библиотеки, лучшим вариантом является использование virtualenvvirtualenvwrapper в качестве помощника bash).

Также стоит упомянуть, если вы хотите простейшее решение без какого-либо сетевого трафика (я не могу себе представить, почему), вы также можете просто ссылаться на сайты-пакеты, например:

sudo ln -fs ~/django_registration/registration /usr/lib/python2.6/dist-packages/django_registration

Если вы используете pip для установки пакета (почему бы и нет?), вы также можете получить версию разработки в easy-install.pth примерно так:

pip install -e hg+http://bitbucket.org/ubernostrum/django-registration/#egg=django_registration

Обновление на основе комментария:

Если вы хотите использовать новый пакет только в текущем модуле, вы можете вручную изменить sys.path, например

sys.path.insert(1,'/path/to/package')

Итак, импорт выбирается из нужного места.

Ответ 2

Вы можете запросить pip переопределить текущие установленные пакеты с помощью --upgrade и pip для установки из локального каталога:

easy_install pip # if you don't have pip installed
pip install /your/package --upgrade

Ответ 3

Я бы использовал виртуальную среду, то есть изолированную установку Python, на которую не распространялись дистрибутивы, установленные в системе. См. Virtualenv и virtualenvwrapper в PyPI.