我已经创建了许多个人库来帮助我进行日常编码。最好的做法是在Python程序的开始部分放置导入。但是说我导入我的库,或者甚至只是从库中的一个函数或类。所有模块都被导入(即使这些模块用于其他未使用的类或函数中)。我认为这会增加程序的开销?控制python导入以减小大小和开销
一个例子。我有一个名为pytools的库,它看起来像这样
import difflib
def foo():
# uses difflib.SequenceMatcher
def bar():
# benign function ie
print "Hello!"
return True
class foobar:
def __init__():
print "New foobar"
def ret_true():
return True
foo函数使用difflib。现在说我正在写一个需要使用bar和foobar的新程序。我既可以写
import pytools
...
item = pytools.foobar()
vals = pytools.bar()
或者我可以做
from pytools import foobar, bar
...
item = foobar()
vals = bar()
无论是否选择开销减少或排除foo和其对difflib依赖进口?如果difflib的导入位于foo函数内部会怎么样?
我遇到的问题是将简单的程序转换为只能使用一个或两个类或函数从我的库中的可执行文件,可执行文件最终是50 MB左右。
我已经通过py2exe的优化大小页面阅读,并可以优化使用它的一些建议。
http://www.py2exe.org/index.cgi/OptimizingSize
我猜我真的要求的最佳实践在这里。有没有办法阻止依赖关系处于未使用函数或类的库的导入?我看过导入语句是使用调试器执行的,看起来python只是在继续之前用“def somefunction”“拾取”该行。在使用函数/类之前,其余的导入是否完成?这意味着在一个函数或类的开头部署高容量导入可以减少库的其余部分的开销。
这实际上是一个关于从Python代码到二进制文件的转换器的问题。你在使用哪种转换器? –
我不知道如何检查?我正在使用python 2.6,如果有帮助 –
你在说“将简单的程序转换成可执行文件......”。您将需要一些程序来执行此转换。这个程序将决定包含哪些模块。 –