Лучшие практики для установки модулей Python из произвольного хранилища VCS - PullRequest
5 голосов
/ 07 июня 2010

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

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

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

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

Ответы [ 4 ]

3 голосов
/ 07 июня 2010

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) и установил cmdutls в папку src на верхнем уровне моей папки virtualenv.

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

$  ls thisIsATest/src
cmdutils
2 голосов
/ 07 июня 2010

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

python setup.py develop

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

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

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

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

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

1 голос
/ 07 июня 2010

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

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

1 голос
/ 07 июня 2010

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

...