我正在处理一个大型代码库,我想建立绳索项目,以便绳索快速并做我想做的事。对于它的价值,我将rope与emacs一起使用,但如果我理解正确,rope的行为应该独立于编辑器。
代码库有许多应用程序使用的许多核心库。每个应用程序都依赖于一个或多个核心库,但从不依赖于另一个应用程序。这是目录结构的简化表示:
回购 |-- 核心 | |--CoreLib1 | | |-- CoreLib1.egg-info | | `-- 库模块 | | |-- __init__.py | | `--lib.py | `--CoreLib2 | |-- CoreLib2.egg-信息 | `-- 库模块 | |-- __init__.py | `--lib.py `-- 应用程序 |-- 应用A | |-- AppA.egg-信息 | `-- app_a_module | |-- __init__.py | `--src.py |-- 应用B | |-- AppB.egg-信息 | `-- app_b_module | |-- __init__.py | `--src.py `-- 应用程序 |-- AppC.egg-信息 `-- app_c_module |-- __init__.py `--src.py
我想做的事
目前我有repo/.ropeproject
,并且绳索的行为符合我的意愿,但速度很慢。我相信缓慢是因为它在任何给定时间分析所有应用程序中的所有代码。为了解决这个问题,我试图在每个/repo/apps/AppA/.ropeproject
知道核心但不知道其他应用程序的应用程序(例如)中创建一个绳索项目。问题是,我无法让它了解核心。这意味着我不能对核心中的任何名称执行任何绳索操作。
工作,但很慢:
.ropeproject
确保整个代码库中没有目录。在 中创建一个绳索项目/repo/
。- 将以下代码放入
/repo/.ropeproject/config.py
:
src_dirs = [ 目录路径 对于 os.walk('core/') 中的目录路径、目录名、文件名 如果有的话(地图(lambda 目录名:目录名.endswith('.egg-info'),目录名)) ] 对于 src_dirs 中的 src_dir: prefs.add('python_path', src_dir)
- 重新加载绳索项目(以确保它使用的是最新更新的
config.py
) - 绳索生成自动导入缓存。这需要 60 秒以上的时间,并且不能在后台运行。
- 编辑
repo/apps/AppA/app_a_module/src.py
时,尝试使用rope从核心自动导入名称。有用。
快速,但不起作用:
.ropeproject
确保整个代码库中没有目录。在 中创建一个绳索项目/repo/apps/AppA/
。- 将以下代码放入
apps/AppA/.ropeproject/config.py
:
src_dirs = [ 目录路径 对于 os.walk('../../core/') 中的目录路径、目录名、文件名 如果有的话(地图(lambda 目录名:目录名.endswith('.egg-info'),目录名)) ] 对于 src_dirs 中的 src_dir: prefs.add('python_path', src_dir)
- 重新加载绳索项目(以确保它使用的是最新更新的
config.py
) - 绳索生成自动导入缓存。这需要不到 1 秒的时间。
- 编辑
repo/apps/AppA/app_a_module/src.py
时,尝试使用rope从核心自动导入名称。它失败。
我想做的事情在rope的能力范围内吗?它应该能够工作吗?如果是这样,我做错了什么?