Прочитайте файл конфигурации, чтобы заполнить имя пакета в conanfile.py

#python #conan

Вопрос:

У меня есть a conanfile.py в корне моего репозитория. Рядом с ним находится файл конфигурации. Чтобы не повторяться, я хотел бы прочитать этот файл конфигурации в моем conanfile.py и заполнить некоторые свойства ConanFile объекта, в том числе name пакета:

 class MyConan(ConanFile):
    name = # ... load from configuration file
 

conanfile.py выполняется в нескольких местах, и я не нашел последовательного способа узнать местоположение моего файла конфигурации. Когда выполняется в репо, тогда я могу использовать __file__ . Однако в кэше conan я не знаю, как поместить мой файл конфигурации в export папку или как получить каталог экспортированных источников достаточно рано во время инициализации класса. Возможно ли вообще добиться загрузки метаданных в conanfile.py ?

Комментарии:

1. Я пытаюсь использовать подход, описанный здесь: docs.conan.io/en/latest/reference/conanfile/methods.html#init Я получал ошибки «Отказано в разрешении» при экспорте файла конфигурации, пока не удалил флаг только для чтения этого файла. Выглядит примерно так же, как эта проблема: github.com/conan-io/conan/issues/3638

Ответ №1:

Решение было на самом деле довольно простым и прямым после того, как я удалил флаг только для чтения из файла data.json (в противном случае экспорт завершится ошибкой с «Отказано в разрешении», по крайней мере, в Windows).:

 import json
import os

from conans import ConanFile, load


class MyConan(ConanFile):
    exports = "data.json"

    def init(self):
        data = json.loads(load(os.path.join(self.recipe_folder, "data.json")))
        self.name = data["name"]
 

Это решение описано здесь: https://docs.conan.io/en/latest/reference/conanfile/methods.html#init