2015-09-10 56 views
0

我試圖凍結包含ZMQ代碼的PyInstaller的二進制文件。在測試應用程序時,一切正常,Python解釋器工作正常,但最終的二進制文件根本不起作用。當包括ZMQ時,Pyinstaller凍結無效的二進制

注意:不同的代碼用在這裏說明和簡化錯誤:

try: 
     import zmq 
     zmq.Context() 
    except Exception, e: 
     print str(e) 

    print 'end' 

Python版本是2.7.6,操作系統是CentOS的6.7,我在虛擬環境下工作,其包括下列的軟件包:

(Compiler)[[email protected] test]$ pip list 
    backports.ssl-match-hostname (3.4.0.2) 
    certifi (2015.9.6.2) 
    cffi (1.2.1) 
    cryptography (1.0.1) 
    Cython (0.23.1) 
    distribute (0.7.3) 
    enum34 (1.0.4) 
    futures (3.0.3) 
    idna (2.0) 
    ipaddress (1.0.14) 
    Jinja2 (2.8) 
    M2Crypto (0.22.3) 
    MarkupSafe (0.23) 
    msgpack-python (0.4.6) 
    npyscreen (4.10.0) 
    pip (7.1.2) 
    psutil (3.2.1) 
    pyasn1 (0.1.8) 
    pycparser (2.14) 
    pycrypto (2.6.1) 
    PyInstaller (2.1) 
    pyroute2 (0.3.14) 
    python-iptables (0.9.0) 
    pytz (2015.4) 
    PyYAML (3.11) 
    pyzmq (14.7.0) 
    requests (2.7.0) 
    salt (2015.5.5) 
    setuptools (18.0.1) 
    six (1.9.0) 
    tornado (4.2.1) 
    tzlocal (1.2) 
    wheel (0.24.0) 

而這種其他rpm包已經通過YUM工具安裝

  1. 案例一:適用於Python解釋器。

    (Compiler)[[email protected] test]$ python test.py 
    end 
    
  2. 案例二:PyInstaller後不工作。

    (Compiler)[[email protected] test]$ pyinstaller --onefile test.py 
    ... 
    12135 INFO: building EXE from out00-EXE.toc 
    12136 INFO: Appending archive to EXE /test/dist/tes 
    
    (Compiler)[[email protected] test]$ /test/dist/test 
    /tmp/_MEIl3jKVa/zmq/libzmq.so: undefined symbol: crypto_secretbox_open 
    end 
    

什麼我失蹤?提前致謝!

回答

0

問題似乎通過將pyzmq版本從14.X降級到13.X(例如:13.1.0已經測試成功)而得到修復。

我認爲pyzmq包括14.X及以上的pyNacl(libsodium)庫。不過,在我的虛擬環境中安裝pyNacl(0.3.0)後,我也嘗試使用Pyinstaller進行凍結,並且出現同樣的錯誤。

有誰知道如何用最新版本的pyzmq來做到這一點?