PyInstaller en mac no puede encontrar libpython2.7

Estoy tratando de hacer una versión binaria de un script de Python usando PyInstaller 2.0. Estoy utilizando un script tkinter básico “hola mundo” pero importé algunas dependencias que necesito para que un proyecto pruebe Pyinstaller. Estoy en un mac con Yosemite 10.10.5. Este es mi guión:

#!/usr/bin/env python from Tkinter import * import Tix import tkMessageBox from sklearn import linear_model, decomposition, preprocessing from sklearn.preprocessing import Imputer from sklearn.cross_validation import cross_val_score, cross_val_predict from sklearn.neighbors import KDTree import numpy as np import collections import array import math import csv from collections import OrderedDict import matplotlib matplotlib.use("TkAgg") import matplotlib.pyplot as plt import matplotlib.dates as dates from matplotlib.mlab import PCA from mpl_toolkits.mplot3d import Axes3D from scipy.stats import mode import heapq import sqlite3 from sqlite3 import datetime root = Tk() w = Label(root, text="Hello, world!") w.pack() root.mainloop() 

Esto funciona perfectamente. Sin embargo, cuando voy a construir el binario usando

 $pyinstaller -w -F app.py 

entonces me sale este error:

 57665 ERROR: Can not find path ./libpython2.7.dylib (needed by //anaconda/bin/python) Traceback (most recent call last): File "//anaconda/bin/pyinstaller", line 11, in  sys.exit(run()) File "//anaconda/lib/python2.7/site-packages/PyInstaller/__main__.py", line 90, in run run_build(pyi_config, spec_file, **vars(args)) File "//anaconda/lib/python2.7/site-packages/PyInstaller/__main__.py", line 46, in run_build PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs) File "//anaconda/lib/python2.7/site-packages/PyInstaller/building/build_main.py", line 788, in main build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build')) File "//anaconda/lib/python2.7/site-packages/PyInstaller/building/build_main.py", line 734, in build exec(text, spec_namespace) File "", line 16, in  File "//anaconda/lib/python2.7/site-packages/PyInstaller/building/build_main.py", line 212, in __init__ self.__postinit__() File "//anaconda/lib/python2.7/site-packages/PyInstaller/building/datastruct.py", line 178, in __postinit__ self.assemble() File "//anaconda/lib/python2.7/site-packages/PyInstaller/building/build_main.py", line 543, in assemble self._check_python_library(self.binaries) File "//anaconda/lib/python2.7/site-packages/PyInstaller/building/build_main.py", line 626, in _check_python_library raise IOError(msg) IOError: Python library not found: libpython2.7.dylib, Python, .Python This would mean your Python installation doesn't come with proper library files. This usually happens by missing development package, or unsuitable build parameters of Python installation. * On Debian/Ubuntu, you would need to install Python development packages * apt-get install python3-dev * apt-get install python-dev * If you're building Python by yourself, please rebuild your Python with `--enable-shared` (or, `--enable-framework` on Darwin) 

¿Alguien tiene alguna idea de cómo puedo solucionar esto? Este error también se produce cuando estoy utilizando el ejemplo básico de hello world sin las dependencias adicionales. Tengo el archivo libpython2.7.dylib en // anaconda / lib y traté de vincularlo a usr / lib / using

 $sudo ln -s /usr/local/lib/libpython2.7.dylib //anaconda/lib/libpython2.7.dylib 

Sin embargo, no está solucionando el problema …

En primer lugar, veo que estás usando Conda. Me encontré con el mismo problema en Mac, específicamente:

 ERROR: Can not find path ./libpython2.7.dylib 

tratando de desplegar una aplicación que armé en un entorno conda.

Después de mucho buscar en Google y leer, descubrí que el PyInstaller actual no maneja muy bien las bibliotecas dinámicas con las referencias de @rpath. Puede confirmar que la referencia de la biblioteca utiliza @rpath ejecutando “otool -L” en el binario de Python, que para usted se ve como // anaconda / bin / python (podría ser un enlace a //anaconda/bin/python2.7) .

Afortunadamente, esto se abordó recientemente en una bifurcación de PyInstaller para conda. El parche específico se encuentra en https://github.com/conda-forge/pyinstaller-feedstock/pull/2

Lo que hice para usar esta versión bifurcada es desinstalar PyInstaller que había descargado en mi entorno conda a través de pip, y luego usé las instrucciones de https://github.com/conda-forge/pyinstaller-feedstock para usar esta bifurcación de PyInstaller en mi entorno conda. Específicamente, estos comandos:

 conda config --add channels conda-forge conda install pyinstaller 

Así que recomiendo cambiar a esta versión parcheada de PyInstaller específicamente para entornos conda, y ver si le ayuda a superar el problema como lo hizo para mí.

Si está usando python a través de pyenv como yo, es posible que deba volver a instalarlo con la habilitación compartida para acceder a xcode libs, a menos que lo haya hecho antes.

 sudo env PYTHON_CONFIGURE_OPTS="--enable-shared" pyenv install 2.7 

PD: Estoy en Darwin, pero aún así, enable-shared trabajo enable-shared que enable-framework

De hecho, el siguiente mensaje de error le dice qué hacer

introduzca la descripción de la imagen aquí