如何防止使用 py2exe 进行不必要的导入?
How to prevent unnecessary imports with py2exe?
我有一个包含以下导入语句的控制台脚本:
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...
编译后,我可以看到它引入了matplotlib
、PIL
、PySide
、PyQt
等库,所有scipy
, statsmodel
、tcl
、wx
、tornado
等。
有没有办法防止这些被导入?我假设它们在某种程度上是 pandas
或 numpy
的可选依赖项,但它们根本没有在脚本中使用,因为它只是一个控制台应用程序。
您可以按照 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},
)
我有一个包含以下导入语句的控制台脚本:
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...
编译后,我可以看到它引入了matplotlib
、PIL
、PySide
、PyQt
等库,所有scipy
, statsmodel
、tcl
、wx
、tornado
等。
有没有办法防止这些被导入?我假设它们在某种程度上是 pandas
或 numpy
的可选依赖项,但它们根本没有在脚本中使用,因为它只是一个控制台应用程序。
您可以按照 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},
)