【问题标题】:PyInstaller on mac can't find libpython2.7Mac上的PyInstaller找不到libpython2.7
【发布时间】:2016-12-19 14:13:15
【问题描述】:

我正在尝试使用 PyInstaller 2.0 制作 Python 脚本的二进制版本。我正在使用一个基本的“hello world”tkinter 脚本,但导入了一些我需要的项目来测试 Pyinstaller 的依赖项。我在运行 Yosemite 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

但它并没有解决问题......

【问题讨论】:

    标签: python exe pyinstaller


    【解决方案1】:

    如果您像我一样通过 pyenv 使用 python,则可能需要重新安装并启用 shared 以访问 xcode 库,除非您之前这样做过。

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

    PS:我在达尔文,但仍然enable-sharedenable-framework 工作得更好

    事实上,下面的错误信息告诉我们该怎么做

    【讨论】:

    • 在 Catalina (10.15.7) 上,“--enable-framework”对我有用
    【解决方案2】:

    首先,我看到您正在使用 conda。我在 Mac 上遇到了完全相同的问题,具体来说:

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

    尝试部署我在 conda 环境中组装的应用程序。

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

    幸运的是,最近在用于 conda 的 PyInstaller 的一个分支上解决了这个问题。具体补丁在https://github.com/conda-forge/pyinstaller-feedstock/pull/2

    我使用这个分叉版本所做的是卸载我通过 pip 在我的 conda 环境中下载的 PyInstaller,然后使用来自https://github.com/conda-forge/pyinstaller-feedstock 的说明在我的 conda 环境中使用 PyInstaller 的这个 fork。具体来说,这些命令:

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

    因此,我建议切换到专门针对 conda 环境的 PyInstaller 补丁版本,看看它是否能像我一样帮助你解决问题。

    【讨论】:

      猜你喜欢
      • 2013-01-18
      • 2018-08-21
      • 2020-07-31
      • 1970-01-01
      • 2017-02-02
      • 2013-07-13
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多