如何使用 python 绳索重构模块?

How to Refactor Module using python rope?

我的项目结构如下

├── app
│   ├── Country
│   │   └── views.py
│   ├── Customer
│   │   └── views.py

模块 'Country' 文件夹是我试图将其重命名为 'Countries' 的地方,每次出现它都会被使用,它也被导入到 Customer/views.py 中。

from app.Country.views   import *
....

根据本教程Refactoring Python Applications for Simplicity,我尝试如下:

>>> from rope.base.project import Project
>>> 
>>> proj = Project('app')
>>> 
>>> Country = proj.get_folder('Country')
>>> 
>>> from rope.refactor.rename import Rename
>>> 
>>> change = Rename(proj, Country).get_changes('Countries')
>>> proj.do(change)

执行脚本后,模块文件夹'Country'被更改为'Countries',但它在Customer/views.py中使用的实例并没有相应改变,import语句在Customer/views.py 仍然是

from app.Country.views   import *

我预计它应该在重构后更改为 from app.Countries.views import *,但它没有。

我还应该做些什么来成功重构它吗?谢谢。

您可以使用 proj.get_module('app.Country').get_resource() 重命名模块。

from rope.base.project import Project
from rope.refactor.rename import Rename

proj = Project('app')
country = proj.get_module('app.Country').get_resource()
change = Rename(proj, country).get_changes('Countries')
print(change.get_description())

如果您碰巧在虚拟环境 and/or Django 中工作(正如 views.py 文件所建议的那样),您可能需要在开始 python 之前定义 PYTHONPATH 变量。

>>> export PYTHONPATH=<path-to-app-folder>:<path-to-virtualen-bin>:<other-paths-used-by-your-project>
>>> python

那么(AnnieFromTaiwan 的代码有效,我猜你的也是有效的,但没有测试):

from rope.base.project import Project
from rope.refactor.rename import Rename

proj = Project('app')
country = proj.get_module('app.Country').get_resource()
change = Rename(proj, country).get_changes('Countries')
proj.do(change)