¿Cómo puedo crear el ejecutable de tamaño mínimo con pyinstaller?

Estoy en Windows 10, tengo instalado anaconda pero quiero crear un ejecutable de manera independiente en un entorno nuevo y limpio con Python 3.5. Así que hice algunas pruebas:

TEST1: creé un script de python test1.py en la carpeta testenv solo con:

print('Hello World') 

Luego creé el entorno, instalé pyinstaller y creé el ejecutable.

 D:\testenv> python -m venv venv_test ... D:\testenv\venv_test\Scripts>activate.bat ... (venv_test) D:\testenv>pip install pyinstaller (venv_test) D:\testenv>pyinstaller --clean -F test1.py 

Y crea mi test1.exe de unos 6 Mb.

PRUEBA 2: modifiqué test1.py como sigue:

 import pandas as pd print('Hello World') 

Instalé pandas en el entorno y creé el nuevo ejecutable:

 (venv_test) D:\testenv>pip install pandas (venv_test) D:\testenv>pyinstaller --clean -F test1.py 

Ant crea mi test1.exe que ahora es de 230 Mb !!!

si ejecuto el comando

 (venv_test) D:\testenv>python -V Python 3.5.2 :: Anaconda custom (64-bit) 

cuando estoy ejecutando pyinstaller recibo algunos mensajes que no entiendo, por ejemplo:

 INFO: site: retargeting to fake-dir 'c:\\users\\username\\appdata\\local\\continuum\\anaconda3\\lib\\site-packages\\PyInstaller\\fake-modules' 

También recibo mensajes sobre matplotlib y otros módulos que no tienen nada que ver con mi código, por ejemplo:

 INFO: Matplotlib backend "pdf": added INFO: Matplotlib backend "pgf": added INFO: Matplotlib backend "ps": added INFO: Matplotlib backend "svg": added 

Sé que hay algunas preguntas relacionadas: Reducir el tamaño del archivo ejecutable de pyinstaller , el tamaño del ejecutable utilizando pyinstaller y numpy, pero no pude resolver el problema y me temo que estoy haciendo algo mal con respecto a la anaconda.

Así que mis preguntas son: ¿qué estoy haciendo mal? ¿Puedo reducir el tamaño de mi ejecutable?

El problema es que no debe utilizar un entorno virtual y, especialmente, no anaconda. Por favor descargue el python de 32 bits predeterminado y use solo los módulos necesarios. Luego siga los pasos proporcionados en los enlaces, esto definitivamente debería solucionarlo.

Aunque creó un entorno virtual, ¿está seguro de que su archivo de especificaciones no está vinculado a las entradas antiguas de Anaconda?

Si todo esto falla, entonces envía un error ya que esto es muy extraño.

Acepté la respuesta anterior, pero publico aquí lo que hice paso a paso para principiantes completos como yo, que se pierden fácilmente.

Antes de comenzar, publico mi secuencia de comandos de ejemplo test1.py completa con todos los módulos que realmente necesito. Mis disculpas si es un poco más compleja que la pregunta original, pero tal vez esto pueda ayudar a alguien.

test1.py se ve así:

 import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.image as image import numpy as np import os.path import pandas as pd import re from matplotlib.ticker import AutoMinorLocator from netCDF4 import Dataset from time import time from scipy.spatial import distance from simpledbf import Dbf5 from sys import argv print('Hello World') 

Agregué matplotlib.use (‘Agg’) (ya que mi código real está creando figuras) Generando un PNG con matplotlib cuando DISPLAY no está definido

1) Instale una nueva versión de python independientemente de anaconda.

descargar python desde: https://www.python.org/downloads/ instalado seleccionando “agregar python a la ruta” y deseleccionando el lanzador de instalación para todos los usuarios (no tengo derechos de administrador) verifique que estoy usando la misma versión de CMD , solo estoy escribiendo python . Obtengo: Python 3.6.4 (v3.6.4: d48eceb, 19 de diciembre de 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] en win32. Escriba “help”, “copyright”, “créditos” o “licencia” para más información.

2) Crear y activar el entorno, desde CMD.

 D:\> mkdir py36envtest ... D:\py36envtest>python -m venv venv_py36 ... D:\py36envtest\venv_py36\Scripts>activate.bat 

3) Instalar en el entorno todos los módulos necesarios en el script.

Asegurándose de que sean compatibles con la versión de python con el comando: (de Matplotlib no se reconoce como un módulo al importar en Python )

 (venv_py36) D:\py36envtest> python -m pip install nameofmodule 

NB: en mi caso también tuve que agregar la opción –proxy https://00.000.000.00:0000

Para el ejemplo utilicé la versión de desarrollo de Py Installer:

 (venv_py36) D:\py36envtest> python -m pip install https://github.com/pyinstaller/pyinstaller/archive/develop.tar.gz 

y los módulos: pandas, matplolib, simpledbf, scipy, netCDF4. Al final mi entorno se ve así.

 (venv_py36) D:\py36envtest> pip freeze altgraph==0.15 cycler==0.10.0 future==0.16.0 macholib==1.9 matplotlib==2.1.2 netCDF4==1.3.1 numpy==1.14.0 pandas==0.22.0 pefile==2017.11.5 PyInstaller==3.4.dev0+5f9190544 pyparsing==2.2.0 pypiwin32==220 python-dateutil==2.6.1 pytz==2017.3 scipy==1.0.0 simpledbf==0.2.6 six==1.11.0 style==1.1.0 update==0.0.1 

4) Cree / modifique el archivo .spec (cuando ejecuta pyinstaller, crea un archivo .spec, puede cambiar el nombre).

Inicialmente obtuve una gran cantidad de ImportError: error en la carga de DLL (especialmente para scipy) y faltaba un error de módulo que solucioné gracias a estas publicaciones:
¿Cuál es la forma recomendada de persistir (decapado) de las tuberías de sklearn personalizadas?
y el comentario a esta respuesta: Pyinstaller con scipy.signal ImportError: error en la carga de DLL

Mi inputtest1.spec finalmente se ve así:

 # -*- mode: python -*- options = [ ('v', None, 'OPTION')] block_cipher = None a = Analysis(['test1.py'], pathex=['D:\\py36envtest', 'D:\\py36envtest\\venv_py36\\Lib\\site-packages\\scipy\\extra-dll' ], binaries=[], datas=[], hiddenimports=['scipy._lib.messagestream', 'pandas._libs.tslibs.timedeltas'], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE(pyz, a.scripts, a.binaries, a.zipfiles, a.datas, name='test1', debug=False, strip=False, upx=True, runtime_tmpdir=None, console=True ) 

5) Finalmente hacer el ejecutable con el comando.

 (venv_py36) D:\py36envtest>pyinstaller -F --clean inputtest1.spec 

mi test1.exe es 47.6 Mb, el archivo .exe del mismo script creado desde un entorno virtual de anaconda es 229 Mb.

Estoy feliz (y si hay más sugerencias son bienvenidas)