#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