Не удается заставить файл BUILD работать в python, все вложенные библиотеки импортируют общий файл constants.py, который находится в корне проекта - PullRequest
0 голосов
/ 08 июня 2019

У меня constants.py сидит в корне проекта, затем у меня есть конфигурация sub lib в config subdir, файл в subdir импортирует constants.py. Он уже работает отлично, просто не может не создать файл BUILD, который может сгенерировать pex-файл.

метод 1: я добавляю constants.py как одну зависимость

python_library(
 sources = rglobs(‘config/*.py’),
 name = ‘config’,
 dependencies=[
   ‘3rdparty/python:requests’,
   ‘3rdparty/python:sh’,
   ‘constants.py’,
 ],
 compatibility = ‘CPython>=2.7,<3’,
)
python_binary(
  name = 'test',
  source='main.py',
  dependencies = [
    '3rdparty/python:requests',
    '3rdparty/python:Flask',
    '3rdparty/python:CherryPy',
    ':config',
  ],
  zip_safe=False,
  compatibility = 'CPython>=2.7,<3',
)

Выдает ошибку: Сообщение об исключении: Каталог «Dir (путь =‘ constants.py ’)» не содержит файлов сборки.

метод 2: я также пытаюсь добавить константы как один исходный файл, например:

 python_library(
     sources = rglobs(‘config/*.py’, 'constants.py'),
     name = ‘config’,
     dependencies=[
       ‘3rdparty/python:requests’,
       ‘3rdparty/python:sh’,
     ],
     compatibility = ‘CPython>=2.7,<3’,
    )

python_binary(
  name = 'test',
  source='main.py',
  dependencies = [
    '3rdparty/python:requests',
    '3rdparty/python:Flask',
    '3rdparty/python:CherryPy',
    ':config',
  ],
  zip_safe=False,
  compatibility = 'CPython>=2.7,<3',
)

Тогда он дал мне эту ошибку: ImportError: Нет модуля с именем константы

метод 3: я также попытался определить все py-файлы, кроме main.py, как один и тот же ресурс, а затем в моей основной lib ссылается на allother как одну зависимость

 resources(
        name='allother',
            sources=rglobs('config/*', 'constants.py'),
    )

python_binary(
  name = 'test',
  source='main.py',
  dependencies = [
    '3rdparty/python:requests',
    '3rdparty/python:Flask',
    '3rdparty/python:CherryPy',
    ':allother',
  ],
  zip_safe=False,
  compatibility = 'CPython>=2.7,<3',
)

. / Main.py:

    from config.config import Config

    def main():
        vs_manager = Config()
        result = vs_manager.run()

        return 0

    if __name__ == "__main__":
        main()

. / Constants.py:

    pi = 3.14

/ конфигурации / config.py:.

    import constants

    class Config:
        def __init__(self):
            self.value = constants.pi

        def run(self):
            print(self.value)

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...