使rope项目意识到核心库

2024-10-02 10:30:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个大的代码库,我想建立rope项目,这样rope就可以很快地实现我想要的功能。不管怎样,我在emacs中使用rope,但是如果我理解正确,rope的行为应该独立于编辑器。在

代码库有许多被许多应用程序使用的核心库。每个应用程序都依赖于一个或多个核心库,但从不依赖于另一个应用程序。以下是目录结构的简化表示:

repo
|-- core 
|   |--CoreLib1
|   |   |-- CoreLib1.egg-info
|   |   `-- library_module
|   |        |-- __init__.py
|   |        `-- lib.py
|   `--CoreLib2
|       |-- CoreLib2.egg-info
|       `-- library_module
|            |-- __init__.py
|            `-- lib.py
`-- apps
    |-- 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,rope按我想要的方式运行,但是速度很慢。我相信慢是因为它在任何给定的时间分析所有应用程序中的所有代码。为了解决这个问题,我尝试在每个应用程序(例如/repo/apps/AppA/.ropeproject)中创建一个rope项目,它知道核心,但不知道其他应用程序。问题是,我不能让它知道核心。这意味着我不能对核心的名字做任何绳索操作。在

有效,但速度慢:

  1. 确保整个代码库中没有.ropeproject目录。在/repo/中创建一个rope项目。在
  2. 将以下代码放入/repo/.ropeproject/config.py
^{pr2}$
  1. 重新加载rope项目(确保它使用最新更新的config.py
  2. Rope生成自动导入缓存。这需要60秒以上,不能在后台运行。在
  3. 在编辑repo/apps/AppA/app_a_module/src.py时,尝试使用rope从核心自动导入一个名称。它起作用了。在

速度快,但不起作用:

  1. 确保整个代码库中没有.ropeproject目录。在/repo/apps/AppA/中创建一个rope项目。在
  2. 将以下代码放入apps/AppA/.ropeproject/config.py
    src_dirs = [
        dirpath
        for dirpath, dirnames, filenames in os.walk('../../core/')
        if any(map(lambda dirname: dirname.endswith('.egg-info'), dirnames))
    ]
    for src_dir in src_dirs:
        prefs.add('python_path', src_dir)
  1. 重新加载rope项目(确保它使用最新更新的config.py
  2. Rope生成自动导入缓存。这不到1秒。在
  3. 在编辑repo/apps/AppA/app_a_module/src.py时,尝试使用rope从核心自动导入一个名称。它失败了。在

我想在rope的能力范围内做什么?它应该可以工作吗?如果是,我做错了什么?


Tags: apps项目代码pyinfosrc应用程序核心

热门问题