小编nic*_*sts的帖子

Pyinstaller自动包含不需要的模块

我试图从我编写的非常简单的脚本中创建一个.exe。该脚本仅包含glob和pandas。但是pyinstaller包括matplotlib,numpy,scipy,qt4,ipython和其他一堆东西。.exe将不会运行,因为matplotlib出现错误,但我什至不需要matplotlib。我要怎么做才能使pyinstaller无法识别仅需要glob和pandas?

我已经手动排除了scipy,matplotlib,PyQt4和iPython,而.exe仍然是160mb!

PS我正在用python 3.4在winpython中这样做。

编辑:经过一些进一步的测试,我将范围缩小到了熊猫。即使是仅包含以下内容的脚本:

import pandas
Run Code Online (Sandbox Code Playgroud)

将创建一个460MB的dist文件夹或一个182MB的单个文件.exe。找出要导入哪些模块以便正确排除所有模块的最简单方法是什么?

Edit2:我尝试制作一个包含以下内容的hook-pandas.py文件:

excludedhooks=['scipy','matplotlib','PIL','cython','PyQt4','zmq']
Run Code Online (Sandbox Code Playgroud)

控制台输出指示由于挂钩文件而删除了导入,但是来自这些模块的大量文件仍最终位于dist文件夹中。

我也尝试过使用--exclude-module将这些模块排除在.spec文件以及控制台中,但这些模块中的文件仍然显示出来。

python pyinstaller python-3.x

7
推荐指数
1
解决办法
8065
查看次数

从2D numpy数组快速计算随机3D numpy数组

我有一个二维的整数数组,我们称之为"A".

我想创建一个所有1和0的三维数组"B",这样:

  • 对于任何固定的(i,j)sum(B[i,j,:])==A[i.j],即B[i,j,:]包含A[i,j] 1s在其中
  • 1s随机放置在第3维.

我知道如何使用标准的python索引来做到这一点,但结果却很慢.

我正在寻找一种方法来利用可以使Numpy快速的功能.

这是我如何使用标准索引来做到这一点:

B=np.zeros((X,Y,Z))
indexoptions=range(Z)

for i in xrange(Y):
    for j in xrange(X):
        replacedindices=np.random.choice(indexoptions,size=A[i,j],replace=False)
        B[i,j,[replacedindices]]=1
Run Code Online (Sandbox Code Playgroud)

有人可以解释我怎么能以更快的方式做到这一点?

编辑:这是一个例子"A":

A=np.array([[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4],[0,1,2,3,4]])
Run Code Online (Sandbox Code Playgroud)

在这种情况下,X = Y = 5且Z> = 5

python arrays numpy

6
推荐指数
1
解决办法
209
查看次数

标签 统计

python ×2

arrays ×1

numpy ×1

pyinstaller ×1

python-3.x ×1