2013-02-27 33 views
5

Tôi đang ở trong Windows, sử dụng pyInstaller để đóng gói tệp python. Nhưng một cái gì đó xảy ra lỗi:pyInstaller: Lỗi nhập

Traceback (most recent call last): 
    File "<string>", line 2, in <module> 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 386, in i 
mportHook 
    mod = _self_doimport(nm, ctx, fqname) 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in d 
oimport 
    exec co in mod.__dict__ 
    File "D:\Useful Apps\pyinstaller-2.0\server\build\pyi.win32\server\out00-PYZ.p 
yz\SocketServer", line 132, in <module> 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 386, in i 
mportHook 
    mod = _self_doimport(nm, ctx, fqname) 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in d 
oimport 
    exec co in mod.__dict__ 
    File "D:\Useful Apps\pyinstaller-2.0\server\build\pyi.win32\server\out00-PYZ.p 
yz\socket", line 47, in <module> 
    File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 409, in i 
mportHook 
    raise ImportError("No module named %s" % fqname) 
ImportError: No module named _socket 

Tôi biết rằng _socket là trong con đường C:\Python27\libs\_socket.lib, nhưng làm thế nào có thể để cho các EXE tìm tập tin đó?

Trả lời

2

Bạn có thể thêm đường dẫn vào tệp thông số ứng dụng của mình.

Trong các đối tượng Analysis bạn có thể chỉ định pathex=['C:\Python27\libs\', 'C:\Python27\Lib\site-packages'], và bất kỳ con đường khác ...

Lưu ý rằng nếu con đường không được tìm thấy không có vấn đề ... Tôi có đường dẫn từ linux cũng như trong đó.

2

Điều này nghe giống như một công việc cho hidden imports (chỉ có trong các bản dựng mới nhất).

Từ các tài liệu

a = Analysis(['myscript.py'], 
      hiddenimports = ['_socket'], 
      <and everything else>) 
1

Nếu bạn đang sử dụng virtualenv bạn nên sử dụng "-p" hoặc "--path = 'D: ...'" tùy chọn. Như thế này:

pyinstaller.exe --onefile --paths=D:\env\Lib\site-packages .\foo.py 

Điều này không là tạo ra tập tin foo.spec với con đường pathex này

0

Không ai trong số các câu trả lời ở trên làm việc cho tôi, nhưng tôi đã nhận được nó để làm việc. Tôi đã sử dụng openpyxl và nó yêu cầu jdcal trong mô-đun datetime.py. Không có mục nhập ẩn nào hoặc bất kỳ phương thức nào trong số những phương thức đó đã giúp, chạy lệnh exe vẫn sẽ không nói jdcal không được tìm thấy. Công việc xung quanh mà tôi đã sử dụng là chỉ sao chép một vài hàm từ jdcal trực tiếp vào datetime.py trong mã openpyxl. Sau đó, chạy pyinstaller -F program.py

và đã hoạt động!

0

Có vấn đề tương tự. Dưới đây là sửa chữa của tôi cho PyQt5, cffi, python 3.4.3:

này sửa chữa các 'nhấm nháp' lỗi không tìm thấy và '_cffi_backend' một nếu mà đi lên:

# -*- mode: python -*- 

block_cipher = None 


a = Analysis(['LightShowApp.py'], 
      pathex=['c:\\MyProjects\\light-show-editor-36', 
      'c:\\Python34\\libs\\', 'c:\\Python34\\Lib\\site-packages'], 
      binaries=None, 
      datas=None, 
      hiddenimports=['sip', 'cffi'], 
      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='LightShowApp', 
      debug=False, 
      strip=False, 
      upx=True, 
      console=True) 

Nhìn vào 'pathex' và 'hiddenimports' ở trên. Đó là những thay đổi duy nhất từ ​​mặc định được tạo. Xây dựng exe với:

pyinstaller LightShowApp.spec -F

Tôi chạy mà ngoài venv hoặc pip bên cùng có lợi - whateverTF tào lao đó là cho!