如何使用 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)
我的项目结构如下
├── 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)