我已经在python 3.3中编写了一个程序,我正在使用WinPython和Inno来进行便携式python安装。但是,WinPython安装中有很多模块,我在程序中并不需要。有没有办法找到随机脚本不使用的python安装的所有模块?
实施例: 假设我已经安装了numpy和matplotlib,我的程序会这样做:
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0,2*np.pi,100)
y = np.sin(x)
plt.plot(x,y)
plt.show()
我想删除python安装中运行该程序不需要的所有文件。
答案 0 :(得分:1)
作弊的方式可能是在运行时利用pyc文件的创建。
最后,只应为运行时使用的模块(.py文件)生成pyc文件。因此,可以排除任何没有相应.pyc的文件。
但请注意,这不会捕获已编译的(.so)模块。
或者,稍微更健壮的方法是使用PathFinder或更通用的Finder。通过挂钩导入机制,您可以拦截Python生成的调用以查找正在导入的模块。您可以使用它来记录有关所使用的模块(以及.py文件)的信息。
class MyFinder(importlib.machinery.PathFinder):
@classmethod
def find_module(self, fullname, path=None):
# do some logging of the module being imported, and where it is coming from.