Python工具用于合并导入项

3
有没有Python工具可以重写一些代码,使其不再需要导入任何东西?
以绘制一个名为box.py的框为例,假设已经有了一个库。
def box(text='Hello, World!')
    draw the box magic
    return

现在在另一个程序中(我们称其为warning.py),它说:

from box import box

box('Warning, water found in hard drive')

有没有一种工具可以使用,看到它从box中导入了box函数(或类),并将该函数(或类,甚至变量定义)插入到warning.py脚本中,删除导入行(从而使其更具可移植性)?谢谢。

2
“...使它更具可移植性”?什么意思? - Ignacio Vazquez-Abrams
“Portable” 可能是我用词不当。我并不是指不同的操作系统或架构,而是指在将代码从一台机器移动到另一台机器时不需要太多麻烦。我的错误。 - narnie
2个回答

7

您似乎希望能够有效地将所有内容复制粘贴到一个文件中,以便分发单个文件而不是多个文件?

在这种情况下,建议使用压缩模块,而不是将所有内容复制粘贴到一个文件中...... 长期来看,这样做更加可维护。

如果zip文件内有一个__main__.py文件,则Python会执行该zip文件。

例如:

echo "def foo(): print 'code inside a.py'" > a.py
echo "def bar(): print 'code inside b.py'" > b.py
echo "import a; import b; a.foo(); b.bar()" > __main__.py
zip test.zip a.py b.py __main__.py
rm a.py b.py __main__.py

python test.zip

这会创建一个包含3个Python文件的zip文件。可以使用 python test.zip 命令来执行它。所有内容都是完全自包含的。(顺便提一下,我认为这需要使用 Python >= 2.6 版本...)


我想这样做,但它们位于不同的目录中(例如lib目录)。这使得这个过程变得有点困难。然而,知道如果有一个__main__.py,它将被执行,这很酷!那非常整洁! - narnie
@narnie - 嗯,你仍然可以复制和导入 zip 文件中的目录(只要每个目录内有一个 __init__.py 文件,就像任何模块一样)。当然,当你在几个不同地方有几个模块时,要追踪它们变得更加困难... 无论如何,祝你好运! - Joe Kington

0

如果你想让你的脚本更容易分发,这不是正确的方法。对于Windows系统,请查看py2exe,它将把所有文件转换为一个可执行文件。对于Linux系统,首选方法是使用一个软件包,用户的软件包管理器将安装它。如果你已经正确设置了distutils,那么为你的软件创建一个软件包应该不难。


对于那些我只想在我们家庭和朋友的不同计算机上移动的快速、简单的脚本,将其打包成deb文件等是过度的。我们使用Linux,所以不像制作py2exe可执行文件那样简单。我会尝试学习distutils,因为我总是喜欢学习新东西。 - narnie
@narnie:在这种情况下,只需将它们放入git存储库中并进行克隆。您将拥有所有文件,并获得源代码控制作为奖励。 - Daenyth
我现在记得阅读过有关distutils的内容。我很失望它不能帮助制作debs。然而,我曾经编写了一些广泛的shell脚本来帮助我为我编写的shell脚本创建debs。一直想用Python实现上面提到的功能。只是一种希望,但看起来这是我无法实现的。 :) - narnie
我一直在考虑使用git。我对它非常生疏,不确定该如何操作,但我愿意学习。我会寻找一些git教程,期待学到新的知识(对我来说)。 - narnie
@narnie:如果你想制作Deb文件,请看一下debhelper和cdbs。不过,制作Deb文件非常复杂,可能不是你的首选。 - Daenyth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接