Если это исключительно для целей тестирования, обновление вашего PYTHONPATH
во время выполнения тестового кода будет примерно эквивалентно Python для обновления LD_LIBRARY_PATH
для тестирования кода C. Примерно таким же образом LD_LIBRARY_PATH
помещает некоторые каталоги в начало пути поиска общего объекта, PYTHONPATH
перемещает определенные каталоги в начало sys.path
и делает это с момента запуска Python (таким образом, вы знаете, что нет никакого странного site
запускаемого импорта, который мог бы иметь место, прежде чем у вас есть время обновить sys.path
в вашем основном модуле).
Использование его для производства неодобрительно (среди прочего, обе Python 2 и 3 читают одну и ту же переменную среды, поэтому это может вызвать проблемы, если какой-либо код в этом месте не совместим с обеими версиями), но для тестовый код, это не более неразумно, чем настройка LD_LIBRARY_PATH
.
Виртуальные среды могут работать, но только если вы сможете каким-то образом опубликовать virtualenv в масштабах всей компании; они хранят полные копии своих локальных библиотек и (по умолчанию) предотвращают доступ к другим установленным на сайте пакетам (для обеспечения чистой среды). Virtualenv, ориентированный на тестирование, может захотеть пропустить коммутатор, который обеспечивает доступ к системным модулям, поэтому он служит дополнением к системе, а не заменой.
Активация virtualenvs в bash
-подобных оболочках - это просто вопрос запуска source /path/to/virtualenv/bin/activate
, а их деактивация - просто deactivate
(он добавляется в вашу оболочку как функция, когда сценарий activate
имеет значение source
ред). Они, как правило, безопаснее, чем изменение PYTHONPATH
(среди прочего, они используют подкаталоги, зависящие от версии, для каждой версии Python Major.minor, поэтому вы не будете случайно запускать специфический код 3.6 для 2.7), но вам это нужно написать свой тестовый код в виде реальных пакетов (с setup.py
файлами и всеми), чтобы правильно управлять ими. Лично я думаю, что это того стоит (в конечном итоге вам нужно будет изучить механизмы упаковки Python), но - это более высокая начальная планка навыков.