我正在开发一个大型代码库,我想设置绳索项目,以便绳索快速完成我想要的工作。对于它的价值,我正在使用带有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
)中创建一个绳子项目。问题是,我无法让它了解核心。这意味着我不能对核心的任何名称进行任何绳索操作。
有效,但速度很慢:
.ropeproject
个目录。在/repo/
。/repo/.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)
config.py
)repo/apps/AppA/app_a_module/src.py
时,尝试使用rope从核心自动导入名称。它有效。速度快但不起作用
.ropeproject
个目录。在/repo/apps/AppA/
。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)
config.py
)repo/apps/AppA/app_a_module/src.py
时,尝试使用rope从核心自动导入名称。它失败了。我想在绳子的能力范围内做些什么?应该可以工作吗?如果是这样,我做错了什么?