使绳索项目了解核心库

时间:2014-11-25 00:56:06

标签: python rope

我正在开发一个大型代码库,我想设置绳索项目,以便绳索快速完成我想要的工作。对于它的价值,我正在使用带有emacs的绳子,但如果我理解正确,绳索的行为应该独立于编辑器。

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

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,绳子表现得我想要,但速度很慢。我认为缓慢是因为它在任何给定时间分析所有应用程序中的所有代码。为了解决这个问题,我正在尝试在每个知道核心但不了解其他应用程序的应用程序(例如/repo/apps/AppA/.ropeproject)中创建一个绳子项目。问题是,我无法让它了解核心。这意味着我不能对核心的任何名称进行任何绳索操作。

有效,但速度很慢:

  1. 确保整个代码库中没有.ropeproject个目录。在/repo/
  2. 中创建一个绳索项目
  3. 将以下代码放入/repo/.ropeproject/config.py
  4.     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. 重新加载绳索项目(以确保它使用刚刚更新的config.py
    2. Rope Generate Autoimport Cache。这需要60秒以上,无法在后台运行。
    3. 在编辑repo/apps/AppA/app_a_module/src.py时,尝试使用rope从核心自动导入名称。它有效。
    4. 速度快但不起作用

      1. 确保整个代码库中没有.ropeproject个目录。在/repo/apps/AppA/
      2. 中创建一个绳索项目
      3. 将以下代码放入apps/AppA/.ropeproject/config.py
      4.     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. 重新加载绳索项目(以确保它使用刚刚更新的config.py
        2. Rope Generate Autoimport Cache。这需要不到1秒钟。
        3. 在编辑repo/apps/AppA/app_a_module/src.py时,尝试使用rope从核心自动导入名称。它失败了。
        4. 我想在绳子的能力范围内做些什么?应该可以工作吗?如果是这样,我做错了什么?

0 个答案:

没有答案