2016-08-17 8 views
-3

Предполагая, что я устанавливаю приложение python из setup.py и делаю это в virtualenv. Кроме того, если предположить, что мне необходимо предоставить конфигурацию, чувствительную к приложениям, такую ​​как ключи/URI API.Pythonic способ обрабатывать установку файла конфигурации, когда в virtualenv?

Мой virtualenv может быть в пути, такие как:

/opt/appname/venv 

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

по умолчанию Пример А может быть установлен:

/etc/appname/config.sample 

Проблема, если я нахожусь в virtualenv, setup.py/Setuptools действительно не обрабатывает установки в глобальный путь (насколько я знать).

Что было бы лучшим питоническим способом справиться с этим довольно распространенным сценарием?

+0

Ваш вопрос немного расплывчатый. О каком глобальном пути вы говорите. Конкретный пример был бы очень полезен. Пожалуйста, отредактируйте свой вопрос и предоставьте эту информацию. – martineau

+0

Я не думаю, что это расплывчато. Конкретный пример невозможно, поскольку речь идет о питоническом стиле. –

+0

Вы рассмотрели варианты альтернативной установки? https://docs.python.org/3/install/index.html#alternate-installation – creativeChips

ответ

1

Предполагая, что файл конфигурации изменяет переменные виртуальной среды, поэтому его необходимо изменить до запуска виртуальной среды, тогда вы можете изменить сценарий bash , расположенный в ./venv/bin, чтобы выполнить это. Так что если вы хотите добавить глобальный путь из файла конфигурации, то последняя строка в activate может быть:

MY_GLOBAL_PATH=<program that looks into config file and returns path> 

Тогда виртуальная окружающая среда может быть активирована, как это обычно будет:

source ./venv/bin/activate 
+0

не решает проблему. –

+0

Мне нравится оставлять мои приложения python как наивные по отношению к файловой системе (включая файлы конфигурации), а вместо этого использовать переменные окружения. Я считаю, что это очень чистая парадигма при использовании виртуальных envs и использовании метода 'os.getenv'. Я выполняю это с помощью переменной VIRTUAL_ENV, созданной pyvenv, для поиска файла внутри каталога проекта или путем добавления дополнительного скрипта переменной bash, который содержит расположение файлов конфигурации вне моего проекта dir. Если вы хотите использовать меньше bash и больше python, вы можете использовать модуль 'os' для установки и получения переменных окружения. –

+0

cfm позволяют развертывать конфигурационные файлы в чистоте и централизованно управляемым образом.особенно полезны утилиты, такие как зашифрованные файлы данных/хранилища для динамических/безопасных ключей описания сюжетов и т. д. переменные среды могут быть опасны, поскольку конфликты пространства имен могут быть более легкими. ИМХО. –

-1

Есть ли у вас пытались использовать Python's site-specific configuration опций? Мне кажется, что файлы .pth и файл sitecustomize.py могут быть полезны.
См. Также: Accepted answer on "Using .pth files".

Давать более точную информацию о том, что можно сделать, трудно без более конкретного примера того типа «глобального пути», который вы имеете в виду, хотя это в какой-то степени общий вопрос стиля.