6

我的项目结构如下

├── 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 中使用的实例没有相应更改,Customer/views.py 中的导入语句仍然

from app.Country.views   import *

我预计它应该在重构后更改为from app.Countries.views import *,但事实并非如此。

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

4

2 回答 2

9

您可以使用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())
于 2019-12-06T07:07:06.697 回答
0

如果您碰巧在虚拟环境和/或 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)
于 2019-12-08T10:13:13.733 回答