Я довольно нов к экосистеме Python и имею вопрос о редактировании модуля.
Я использую набор сторонних модулей, распределенных на PyPi. Происходя из C и фона Java, я люблю простоту easy_install <whatever>
. Это - новый, замечательный мир, но модель ломается, когда я хочу отредактировать недавно установленный модуль по двум причинам:
egg
файлы могут храниться в папке или архиве, где-нибудь сумасшедшем в файловой системе.egg
кажется, устраняет использовать систему управления версиями инициирующего проекта, так же, как использование debian пакета устраняет разработку из инициирующего репозитория VCS.Какова лучшая практика для установки модулей из произвольного репозитория VCS? Я хочу смочь продолжить к import foomodule
в других сценариях. И если я изменю исходный код модуля, то я должен буду выполнить какие-либо дополнительные команды?
Вы хотите заниматься разработкой, но должна ли система обрабатывать разработанную версию как яйцо (например, для получения точек входа)? Если это так, то вам следует проверить исходный код и использовать Режим разработки , выполнив:
python setup.py develop
Если проект не является проектом на основе setuptools, который требуется для вышеупомянутого, быстрое решение: эта команда:
python -c "import setuptools; execfile('setup.py')" develop
Почти все, что вы когда-либо хотели знать об инструментах настройки (основа easy_install), можно найти в документах по инструментам настройки . Также есть документы для easy_install .
В режиме разработки проект добавляется в ваш путь импорта точно так же, как это делает easy_install. Внесенные вами изменения будут доступны вашим приложениям при следующем импорте модуля.
Как уже упоминалось, вы также можете напрямую использовать URL-адреса управления версиями, если вы просто хотите получить последнюю версию, как сейчас, без возможности редактирования, но это будет только снимок, и действительно создает обычное яйцо как часть процесса. Я точно знаю, что это касается Subversion, и я думал, что это касается других, но я не могу найти документацию по этому поводу.
Вы можете использовать переменную окружения PYTHONPATH
или сделать символическую ссылку на ваш код где-нибудь в пакетах сайтов.
Пакеты, устанавливаемые с помощью easy_install, обычно происходят из моментальных снимков системы управления версиями разработчика, которые обычно создаются, когда разработчик выпускает официальную версию. Поэтому вам придется выбирать между удобной автоматической загрузкой с помощью easy_install и актуальными обновлениями кода с помощью контроля версий. Если вы выберете последнее, вы можете собрать и установить большинство пакетов, отображаемых в индексе пакетов python, непосредственно из проверки контроля версий, запустив python setup.py install
.
Если вам не нравится каталог установки по умолчанию, вы можете вместо этого выполнить установку в другое место и экспортировать переменную среды PYTHONPATH
, значением которой является путь к родительской папке установленного пакета.
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