Проблема, получающая доступ к файлам конфигурации в яйце Python

У меня есть проект Python, который имеет следующую структуру:

package1
  class.py
  class2.py
  ...
package2
  otherClass.py
  otherClass2.py
  ...
config
  dev_settings.ini
  prod_settings.ini

Я записал setup.py файл, который преобразовывает это в яйцо с той же файловой структурой. (Когда я исследую его с помощью программы zip, структура кажется идентичной.) Забавная вещь, когда я выполняю код Python от своего IDE, это хорошо работает и может получить доступ к файлам конфигурации; но когда я пытаюсь выполнить его из другого сценария Python с помощью яйца, это, может казаться, не находит файлы конфигурации в яйце. Если я поместил файлы конфигурации в каталог относительно вызова сценарий Python (внешний к яйцу), это работает - но такие поражения цель наличия автономного яйца, которое имеет всю функциональность программы и может быть названо отовсюду. Я могу использовать любые классы/модули и выполнить любые функции от яйца, пока они не используют файлы конфигурации..., но если они делают, яйцо не может найти их и таким образом, функции не работают.

Любая справка действительно ценилась бы! Мы довольно плохо знакомы с вещью яйца здесь и действительно не знаем, где запустить.

11
задан froadie 18 June 2010 в 16:14
поделиться

2 ответа

Проблема в том, что файлы конфигурации больше не являются файлами - они упакованы внутри яйца. Найти ответ в документации непросто, но он есть. Из руководства разработчика setuptools :

Обычно существующие программы манипулируют атрибутом пакета __ file __ , чтобы найти расположение файлов данных. Однако эта манипуляция несовместима с обработчиками импорта на основе PEP 302, включая импорт из zip-файлов и яиц Python.

Чтобы получить к ним доступ, необходимо следовать инструкциям для API управления ресурсами.

В моем собственном коде у меня была эта проблема с файлом конфигурации журналирования. Я успешно использовал API вот так:

from pkg_resources import resource_stream

_log_config_file = 'logging.conf'
_log_config_location = resource_stream(__name__, _log_config_file)
logging.config.fileConfig(_log_config_location)
_log = logging.getLogger('package.module')
12
ответ дан 3 December 2019 в 08:28
поделиться

См. Обсуждение в Setuptools доступа к упакованным файлам данных во время выполнения . Вы должны получить файл конфигурации другим способом , если хотите, чтобы сценарий работал внутри яйца. Кроме того, чтобы это работало, вам может потребоваться сделать каталог конфигурации пакетом Python, добавив пустой файл __ init __. Py .

2
ответ дан 3 December 2019 в 08:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: