Лучшая практика для установки модулей Python из произвольного репозитория VCS

Я довольно нов к экосистеме Python и имею вопрос о редактировании модуля.

Я использую набор сторонних модулей, распределенных на PyPi. Происходя из C и фона Java, я люблю простоту easy_install <whatever>. Это - новый, замечательный мир, но модель ломается, когда я хочу отредактировать недавно установленный модуль по двум причинам:

  1. egg файлы могут храниться в папке или архиве, где-нибудь сумасшедшем в файловой системе.
  2. Используя egg кажется, устраняет использовать систему управления версиями инициирующего проекта, так же, как использование debian пакета устраняет разработку из инициирующего репозитория VCS.

Какова лучшая практика для установки модулей из произвольного репозитория VCS? Я хочу смочь продолжить к import foomodule в других сценариях. И если я изменю исходный код модуля, то я должен буду выполнить какие-либо дополнительные команды?

5
задан fmark 7 June 2010 в 00:21
поделиться

4 ответа

Вы хотите заниматься разработкой, но должна ли система обрабатывать разработанную версию как яйцо (например, для получения точек входа)? Если это так, то вам следует проверить исходный код и использовать Режим разработки , выполнив:

python setup.py develop

Если проект не является проектом на основе setuptools, который требуется для вышеупомянутого, быстрое решение: эта команда:

python -c "import setuptools; execfile('setup.py')" develop

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

В режиме разработки проект добавляется в ваш путь импорта точно так же, как это делает easy_install. Внесенные вами изменения будут доступны вашим приложениям при следующем импорте модуля.

Как уже упоминалось, вы также можете напрямую использовать URL-адреса управления версиями, если вы просто хотите получить последнюю версию, как сейчас, без возможности редактирования, но это будет только снимок, и действительно создает обычное яйцо как часть процесса. Я точно знаю, что это касается Subversion, и я думал, что это касается других, но я не могу найти документацию по этому поводу.

2
ответ дан 14 December 2019 в 08:43
поделиться

Вы можете использовать переменную окружения PYTHONPATH или сделать символическую ссылку на ваш код где-нибудь в пакетах сайтов.

1
ответ дан 14 December 2019 в 08:43
поделиться

Пакеты, устанавливаемые с помощью easy_install, обычно происходят из моментальных снимков системы управления версиями разработчика, которые обычно создаются, когда разработчик выпускает официальную версию. Поэтому вам придется выбирать между удобной автоматической загрузкой с помощью easy_install и актуальными обновлениями кода с помощью контроля версий. Если вы выберете последнее, вы можете собрать и установить большинство пакетов, отображаемых в индексе пакетов python, непосредственно из проверки контроля версий, запустив python setup.py install .

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

1
ответ дан 14 December 2019 в 08:43
поделиться

Pip позволяет устанавливать файлы, указывая URL-адрес репозитория Subversion, git, Mercurial или bzr.

pip install -e svn+http://path_to_some_svn/repo#egg=package_name

Пример: pip install -e hg+https://rwilcox@bitbucket.org/ianb/cmdutils#egg=cmdutils

Если бы я хотел скачать последнюю версию cmdutils. (случайный пакет, который я решил вытащить).

Я установил его в virtualenv (используя параметр -E), а pip установил cmdutls в папку src на верхнем уровне папки virtualenv.

pip install -E thisIsATest -e hg+https://rwilcox@bitbucket.org/ianb/cmdutils#egg=cmdutils

$  ls thisIsATest/src
cmdutils
3
ответ дан 14 December 2019 в 08:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: