Разработка и использование одного и того же Python на одном компьютере - PullRequest
1 голос
/ 12 октября 2010

Я разрабатываю служебный модуль Python для загрузки файлов, архивов и т. Д. У меня есть проект, настроенный в виртуальной среде, и мои модульные тесты.Когда я хочу использовать этот модуль на том же компьютере (по сути, как «Производство»), я перемещаю файлы в каталог mymodule в ~ / dev / modules / mymodule

Я храню все сторонние модули в ~ / dev / modules / contrib .Этот путь contrib находится на моей PYTHONPATH, но mymodule НЕ, потому что я заметил, что если mymodule на моей PYTHONPATH, мои модульные тесты не могут различить версию "Development" и«Производственная» версия.Но теперь, если я хочу использовать этот общий служебный модуль, я должен вручную добавить его в PYTHONPATH.

Это работает, но я уверен, что есть лучший, более автоматизированный способ.

Каков наилучший способ иметь модуль разработки и производства на одном компьютере? Например, есть ли способ динамически установить PYTHONPATH?

Ответы [ 3 ]

1 голос
/ 12 октября 2010

Полагаю, под виртуальной средой вы имеете в виду пакет virtualenv?

http://pypi.python.org/pypi/virtualenv

Я бы попробовал (и прошу прощения, если я не правильно понял вопрос):

  • Храните источник где-нибудь, на который не ссылается PYTHONPATH (например, ~ / projects / myproject)
  • Напишите простой скрипт setuptools или distutils для его установки (см. Python distutils - кто-нибудь знает, как его использовать? )
  • Используйте пакет virtualenv для создания виртуальной среды dev с опцией --no-site-packages - таким образом, ваша версия "dev" не увидит никаких пакетов, установленных при установке по умолчанию на python.
  • (Также убедитесь, что у вашего PYTHONPATH нет ваших исходных каталогов)

Затем для тестирования:

  • Активировать виртуальную среду разработки
  • Запустите скрипт установки (обычно что-то вроде python setup.py build install). Ваш пакет заканчивается в /path/to/dev_virtualenv/lib/python2.x/site-packages/
  • Проверка, разрыв, исправление, повтор

А, для производства:

  • Убедитесь, что dev virtualenv не активирован
  • Запустить скрипт установки
  • Все хорошо, версия "dev" спрятана в виртуальной среде, которую производство не видит ...
  • ... И нет (прямого) возни с PYTHONPATH

Тем не менее, я пишу это с уверенностью того, кто на самом деле не пытался настроить, используя virtualenv в гневе, и надеюсь, что я смутно понял ваш вопрос ...;)

1 голос
/ 12 октября 2010

Вы можете добавить / изменить пути Python в sys.path, просто убедитесь, что первый путь является текущим каталогом ".", поскольку некоторые сторонние модули зависят от импорта из каталога текущего модуля.

Дополнительная информация о путях Python: http://djangotricks.blogspot.com/2008/09/note-on-python-paths.html

0 голосов
/ 12 октября 2010

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

(Это слишком упрощенно? Я что-то пропустил?)

...