Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In PyInstaller, Why Won't NumPy.Random.Common Load as a Module?

I'm trying to compile a .py program into a Windows .exe using PyInstaller. Whenever I try to execute the .exe, the terminal opens, then closes quickly with the error:

ImportError: Unable to import required dependencies: numpy: No module named 'numpy.random.common'

I'm not explicitly importing numpy; it's being import by pandas.

I also get this long list of warnings about modules that couldn't be loaded in the warnings log for pyinstaller.

I've tried adding hiddenimports=['numpy.random.common'] in my .spec file, I've tried running `pyinstaller [file].py -F --hidden-import="numpy.random.common". I've read the other stackoverflow posts about pyinstaller and hiddenimports, yet nothing seems to fix this error.

I'm using a virtual environment, so I'm not sure if that's playing a part.

Here's my .spec file

# -*- mode: python ; coding: utf-8 -*-

block_cipher = None

a = Analysis(['getNewPropertiesLabels.py'],
             pathex=['C:\\Users\\[user name]\\OneDrive\\Documents\\Consulting\\[file name]'],
             binaries=[],
             datas=[],
             hiddenimports=['numpy.random.common'],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          [],
          name='Name',
          debug=False,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          upx_exclude=[],
          runtime_tmpdir=None,
          console=True')

My warning file causes the post to be too long, however numpy.random.common isn't actually listed as a missing module. Neither is numpy.random.

I'm expecting this to just run properly without any issues.

like image 411
Tracey Avatar asked Jul 30 '19 04:07

Tracey


3 Answers

Solved this by adding three imports before import pandas.

import numpy.random.common
import numpy.random.bounded_integers
import numpy.random.entropy

It seems that PyInstaller loses the path to these libraries... Then, at the command line I wrote:

pyinstaller install -n APP_NAME -c --clean SCRIPT_NAME.py

and it worked for me.

like image 102
Dave Avatar answered Oct 20 '22 07:10

Dave


I could fix it downgrading numpy from 1.17.0 to 1.16.2. In the attached image you can see the related pandas, numpy and rest of the packages I've used.

pip uninstall numpy
pip install numpy==1.16.2

Packages used

like image 20
Anibal Avatar answered Oct 20 '22 06:10

Anibal


In my environment with numpy==1.16.1 and pandas==0.24.1 I do not have numpy.random.common

If you try to import it from python console it works?

Maybe try to upgrade/downgrade pandas (pip install pandas==0.24.1).

like image 1
Grzegorz Bokota Avatar answered Oct 20 '22 07:10

Grzegorz Bokota