如何使用py2exe防止不必要的导入?

时间:2015-04-30 15:43:36

标签: python numpy pandas py2exe

我有一个包含以下import语句的控制台脚本:

import pandas as pd
from time import time
from datetime import date, datetime, timedelta
import numpy as np
import sys

我尝试使用py2exe为此脚本创建Windows可执行文件,但遇到了一些麻烦,因为它似乎带来了它不需要的各种事物(过度模块搜索,也许?)。

我使用以下setup.py

from distutils.core import setup
import py2exe
import numpy
import sys
import zmq
import os

sys.setrecursionlimit(5000)

os.environ["PATH"] = os.environ["PATH"] + \
                     os.path.pathsep + os.path.split(zmq.__file__)[0]

setup(
    console=['script.py'],
    data_files=[(".",["config_file.txt",])]
)

由于初始编译期间出现的错误,我必须包含递归行和zmq的内容。编译适用于此示例,但会导致dist/文件夹超过300MB ...

编译后,我可以看到它引入了matplotlibPILPySidePyQt等所有scipy,{{{{{{ 1}},statsmodeltclwx等。

有没有阻止这些进口?我假设它们在某种程度上是tornadopandas的可选依赖项,但它们根本不在脚本中使用,因为它只是一个控制台应用程序。

1 个答案:

答案 0 :(得分:2)

您可以按照py2exe OptimizingSize页面中的建议手动排除您不需要的软件包。我已经复制了他们的例子,以防页面消失。

   from distutils.core import setup
   import py2exe

   import sys; sys.argv.append('py2exe')

   py2exe_options = dict(
                 ascii=True,  # Exclude encodings
                 excludes=['_ssl',  # Exclude _ssl
                           'pyreadline', 'difflib', 'doctest', 'locale', 
                           'optparse', 'pickle', 'calendar'],  # Exclude standard library
                 dll_excludes=['msvcr71.dll'],  # Exclude msvcr71
                 compressed=True,  # Compress library.zip
                 )

   setup(name='<Name>',
         version='1.0',
         description='<Description>',
         author='Ofer Schwarz',

         console=['script.py'],
         options={'py2exe': py2exe_options},
         )