我正在尝试使用PyInstaller 2.0创建Python脚本的二进制版本。我正在使用一个基本的“ hello world” tkinter脚本,但是导入了一些我需要一个项目来测试Pyinstaller的依赖项。我在运行优胜美地10.10.5的Mac上。
这是我的脚本:

#!/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()


这运行得很好。但是当我去使用构建二进制文件时

$pyinstaller -w -F app.py


然后我得到这个错误:

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 <module>
    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 "<string>", line 16, in <module>
  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)


有谁知道我该如何解决?当我使用基本的hello world示例而没有额外的依赖关系时,也会发生此错误。我在// anaconda / lib中有libpython2.7.dylib文件,我尝试使用以下命令将其链接到usr / lib /

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


但是它不能解决问题...

最佳答案

首先,我看到您正在使用conda。我在Mac上遇到了完全相同的问题,特别是:

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


尝试部署我在conda环境中放在一起的应用程序。

经过大量的Google搜索和阅读后,我发现当前的PyInstaller无法很好地使用@rpath引用处理动态库。您可以通过在Python二进制文件上运行“ otool -L”来确认库引用是否使用@rpath,对您而言,它看起来像// anaconda / bin / python(可能是//anaconda/bin/python2.7的链接) 。

幸运的是,最近在PyInstaller for conda的一个分支上解决了此问题。特定修补程序位于https://github.com/conda-forge/pyinstaller-feedstock/pull/2

我使用此分叉版本所做的是卸载在panda中从conda环境中下载的PyInstaller,然后使用https://github.com/conda-forge/pyinstaller-feedstock中的说明在conda环境中使用PyInstaller的此派生。具体来说,这些命令:

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


因此,我建议您切换到专门针对conda环境的PyInstaller修补程序版本,并查看它是否可以帮助您解决问题(对我而言)。

关于python - Mac上的PyInstaller找不到libpython2.7,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38920076/

10-11 22:44
查看更多