我如何找到过时的python模块?

时间:2014-02-24 22:04:04

标签: python

我已经在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安装中运行该程序不需要的所有文件。

1 个答案:

答案 0 :(得分:1)

作弊的方式可能是在运行时利用pyc文件的创建。

  1. 从WinPython中删除所有.pyc文件
  2. 确保您在程序运行时有权在WinPython文件夹中生成.pyc文件
  3. 运行程序
  4. 最后,只应为运行时使用的模块(.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.