用于移动python文件的工具。

slicker的Python项目详细描述


slicker:在python中移动东西的工具

Build Status

如果您曾经试图在python中移动函数或类,您会发现 有点痛苦:你不仅要移动定义(和它的导入, 也可以更新整个代码库中的引用。滑头是用来 就这么做!

安装

pip install slicker

用法

foo/bar.py中定义的函数myfunc移动到foo/baz.py

slicker foo.bar.myfunc foo.baz.myfunc

如果myfunc是常量或类(尽管 当然希望您没有命名类myfunc!)如果你想的话 更改myfunc

的名称
slicker foo.bar.myfunc foo.bar.new_name_for_myfunc

(您也可以以自然的方式同时进行这两种更改。)

要将整个模块foo/bar.py移动到foo/baz.py,可以执行类似的操作:

slicker foo.bar foo.baz

或者使用如下文件名:

slicker foo/bar.py foo/baz.py

还可以将符号移动到现有模块或模块中 现有目录,就像^ {CD10}}。所以这相当于第一个 示例:

slicker foo.bar.myfunc foo.baz

并在现有目录中将^ {< CD3>}移动到新文件^ {< CD12>} newfoo/,你可以这样做

slicker foo.bar newfoo  # (or slicker foo/bar.py newfoo/)

使用此语法,还可以指定要移动的多个对象,以便 用

foo/bar.pyfoo/baz.py移动到newfoo/
slicker foo/bar.py foo/baz.py newfoo/

您可以告诉slicker在使用-a/--alias

添加导入时使用别名。
slicker foo.bar.myfunc foo.baz.myfunc --alias baz

在这种情况下,slicker将在任何地方添加from foo import baz,而不是 import foo.baz。(在这种情况下,您也可以使用--alias foobaz 我们本可以做到import foo.baz as foobaz。)

如果你想自己移动实际的定义,只要有更光滑的 更新引用,可以传递--no-automove。最好是跑 slicker完成上述动作后。

有关选项的完整列表,请运行slicker --help

常见和不常问的问题

如果slicker说“这个导入可以隐式使用”,那它是什么意思?

如果你做了import foo.bar,和其他一些文件(可能是另一个 import)执行import foo.baz,那么您的foo现在也有一个foo.baz,依此类推 即使文件中没有导入,也可以不受惩罚地执行foo.baz.func() 直接提到那个模块。(这是因为两个文件中的foo都引用了 同一个对象--a.k.a.sys.modules['foo'],当另一个文件 是否import foo.bazbaz附加到共享对象。) 要求slicker将foo.bar移动到newfoo.bar,在更新此文件时 想用import newfoo.bar替换import foo.bar,但是 不能--实际上您仍在使用导入。所以它会警告你 凯斯,让你亲手解决。

斯里克特给我留下了一堆错误的或长长的队伍!

是的,我们还没修好你的皮棉应该告诉你该怎么做 不过,还是要修好。

为什么叫滑头?

因为Python会滑翔四处移动,但这条路,呃,更光滑。那就是 说:这在当时似乎是个好主意,据我所知 名字还没取

它是如何工作的?

参见blog post了解 概述。如果这还不够的话,就去窃听作者或者阅读源代码!

为什么不直接使用PyCharmrope

好问题——我们试过了!两者都是伟大的工程,做了很多事情 斯里克特不会;如果他们为你工作,那么一定要用他们。但对我们来说, 他们是一辆小车,不符合我们的工作流程。有关详细信息,请参见 这是blog post

为什么不直接用codemodsed/perl

好问题——我们试过了!但要把很多东西粘在一起 找出每个文件中要修复的所有正确引用。还有 基本上没有希望在修复字符串引用时做正确的事情。 我们需要知道python导入意味着什么并能够处理它们的 特殊情况。

变更日志

0.9.2

  • 再次修复pypi上的描述

0.9.2

  • 修复PYP上的描述我

0.9.1

  • 正确处理相对导入
  • 大量的内部重构

0.9

  • PYPI的初始版本

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java错误:无法解析方法   如何用相同的父标记和子标记在Java中解析XML?   日期使用Java中的时区偏移将本地时间转换为UTC   java如何在多进程、多线程环境中读取文件   WebView中的java弹出式对话框不在当前显示范围内,但在chrome浏览器中运行良好   只有2个参数的java递归二进制搜索方法   无法在java中调用函数   java JavaMail在Tomcat服务器上运行时停止工作   反射通过java程序生成、编译和运行java类   java Android:如何使ListView即使在应用程序关闭后仍保持禁用状态   在JAVA中识别匿名类实例   java渲染一个由三角形组成的立方体,在旋转时会产生奇怪的角度   函数式编程如何基于比较连续的列表元素将Java流减少为布尔值   java如何替换列表中的多个项目?   java Android如何获取随机sqlite数据?   java我已经将useSSL设置为false,但仍然收到警告   java使用动态变量生成jlabel   apachespark:java。lang.NoClassDefFoundError v2TableWithV1回退