Ознакомить проект веревки с основными библиотеками

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

База кода имеет много базовых библиотек, используемых многими приложениями. Каждое приложение зависит от одной или нескольких базовых библиотек, но никогда не от другого приложения. Вот упрощенное представление структуры каталогов:

Сделки рЕПО
| - ядро 
| | --CoreLib1
| | | - CoreLib1.egg-info
| | `- library_module
| | | - __init__.py
| | `- lib.py
| `--CoreLib2
| | - CoreLib2.egg-info
| `- library_module
| | - __init__.py
| `- lib.py
`- приложения
    | - AppA
    | | - AppA.egg-info
    | `- app_a_module
    | | - __init__.py
    | `- src.py
    | - AppB
    | | - AppB.egg-info
    | `- app_b_module
    | | - __init__.py
    | `- src.py
    `- AppC
        | - AppC.egg-info
        `- app_c_module
             | - __init__.py
             `- src.py

Что я хочу сделать

В настоящее время у меня есть repo/.ropeproject и веревка ведет себя так, как я хочу, но медленно. Я считаю, что медлительность заключается в том, что он анализирует весь код во всех приложениях в любой момент времени. Чтобы решить эту проблему, я пытаюсь создать проект веревки в каждом приложении (например, /repo/apps/AppA/.ropeproject), который знает о ядре, но не знает о других приложениях. Проблема в том, что я не могу узнать о ядре. Это означает, что я не могу выполнять какие-либо операции с веревками над именами из ядра.

Работает, но медленно

  1. Убедитесь, что нет .ropeproject каталоги во всей кодовой базе. Создать проект веревки в /repo/,
  2. Поместите следующий код в /repo/.ropeproject/config.py:
    src_dirs = [
        dirpath
        для dirpath, dirnames, имена файлов в os.walk('core/')
        если есть (карта (лямбда-dirname: dirname.endswith('.egg-info'), dirnames))
    ]
    для src_dir в src_dirs:
        prefs.add('python_path', src_dir)
  1. Перезагрузите проект веревки (чтобы убедиться, что он использует недавно обновленный config.py)
  2. Веревка генерирует кэш автоимпорта. Это занимает более 60 секунд и не может работать в фоновом режиме.
  3. Во время редактирования repo/apps/AppA/app_a_module/src.py попытайтесь использовать веревку для автоматического импорта имени из ядра. Оно работает.

Быстро, но не работает:

  1. Убедитесь, что нет .ropeproject каталоги во всей кодовой базе. Создать проект веревки в /repo/apps/AppA/,
  2. Поместите следующий код в apps/AppA/.ropeproject/config.py:
    src_dirs = [
        dirpath
        для dirpath, dirnames, имена файлов в os.walk('../../core/')
        если есть (карта (лямбда-dirname: dirname.endswith('.egg-info'), dirnames))
    ]
    для src_dir в src_dirs:
        prefs.add('python_path', src_dir)
  1. Перезагрузите проект веревки (чтобы убедиться, что он использует недавно обновленный config.py)
  2. Веревка генерирует кэш автоимпорта. Это займет не более 1 секунды.
  3. Во время редактирования repo/apps/AppA/app_a_module/src.py попытайтесь использовать веревку для автоматического импорта имени из ядра. Это не удается.

Это то, что я хочу сделать в рамках возможностей веревки? Должно ли оно быть в состоянии работать? Если так, что я делаю не так?

0 ответов

Другие вопросы по тегам