2010-10-12 2 views
1

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

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

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

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

+0

Ваш вопрос не очень понятно. Является ли общий модуль утилиты тем, что вы разрабатываете? Если это так, вы хотите перенести его в производственную зону после проведения модульных испытаний и использовать его из производственной зоны для модульных испытаний других модулей? – sateesh

+0

Да, это то, чем я развиваюсь. Я хочу переместить его в Prod для использования в других сценариях и программах. –

ответ

1

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

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

+0

Благодарим за помощь. Я разместил здесь следующий вопрос: http://stackoverflow.com/questions/3947464, потому что у меня возникли проблемы с носом, чтобы использовать ваше предложение. –

0

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

(Это слишком упрощенно? Разве я что-то пропустил?)

+0

«Глобальная переменная среды» означает просто установку PYTHONPATH для системы? Можете ли вы привести пример того, как установить путь (а не просто добавить его) в код Python? –

+1

@Wraith: Re. «глобальная переменная среды»: да, точно. Число рейнольдса msgstr "установить путь в коде Python": путь Python находится в 'sys.path' как простой старый список Python - вы можете манипулировать им, как вам нравится (для текущей сессии Python). – RichieHindle

1

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

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

То, что я хотел бы попробовать (и извинения, если я не понял вопрос правильно) является:

  • Держите источник где-то, что не ссылается PYTHONPATH (например, ~/проекты/MyProject)
  • Написать простой Setuptools или Distutils скрипта для его установки (см Python distutils - does anyone know how to use it?)
  • Используй пакет virtualenv создать виртуальную среду разработки с опцией --no-то сайт-пакеты - это в y ваша версия «dev» не увидит никаких пакетов, установленных в установке python по умолчанию.
  • (Также убедитесь, что ваш PYTHONPATH не имеет какой-либо из ваших исходных каталогов)

Тогда для тестирования:

  • Activate DEV виртуальной среды
  • Run установить скрипт (обычно что-то как установка python setup.py build). Ваш пакет заканчивается в/path/to/dev_virtualenv/lib/python2.х/сайт-пакеты/
  • Test, перерыв, исправить, повторить

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

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

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

+0

Я использую virtualenv для разработки, а исходный каталог не ссылается на мой глобальный PYTHONPATH. Проблема, однако, в том, что мой глобальный PYTHONPATH поддерживается даже в активированном virtualenv. Так что, если у меня есть код Prod на моем пути, тесты смотрят там сначала (его каталог более мелкий). Есть ли способ перезаписать глобальный PYTHONPATH при активации virtualenv? Или, возможно, я могу просто удалить Prod-путь в начале моего теста? –

+1

Если у вас есть только один каталог на вашем PYTHONPATH, тогда вы можете просто добавить строку к скрипту активации virtualenv как «unsetenv PYTHONPATH», но если у вас есть несколько виртуальных и/или записей на PYTHONPATH, которые могут стать немного беспорядочными , Можете ли вы установить свою производственную версию где-нибудь, где вам не нужно использовать PYTHONPATH для ее загрузки (таким образом, чтобы избежать необходимости устанавливать PYTHONPATH в первую очередь), или вы делаете это уже ...? (Опять же, извиняюсь, если я все еще не понимаю!) – FredL

Смежные вопросы