13

私はWindowsで作業しておりPyInstaller、pythonファイルをパッケージ化するために使用しています。しかし、いくつかのエラーが発生しています:

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 importHook
    mod = _self_doimport(nm, ctx, fqname)
  File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in doimport
    exec co in mod.__dict__
  File "D:\Useful Apps\pyinstaller-2.0\server\build\pyi.win32\server\out00-PYZ.pyz\SocketServer", line 132, in <module>
  File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 386, in importHook
    mod = _self_doimport(nm, ctx, fqname)
  File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 480, in doimport
    exec co in mod.__dict__
  File "D:\Useful Apps\pyinstaller-2.0\server\build\pyi.win32\server\out00-PYZ.pyz\socket", line 47, in <module>
  File "D:\Useful Apps\pyinstaller-2.0\PyInstaller\loader\iu.py", line 409, in importHook
    raise ImportError("No module named %s" % fqname)
ImportError: No module named _socket

_socketそれが pathにあることは知ってC:\Python27\libs\_socket.libいますが、生成さEXEれたファイルにそのファイルを見つけるにはどうすればよいですか?

4

9 に答える 9

3

これは、非表示のインポートの仕事のように思えます (最新のビルドでのみ利用可能)。

ドキュメントから

a = Analysis(['myscript.py'], 
             hiddenimports = ['_socket'], 
             <and everything else>)
于 2013-03-05T18:15:25.600 に答える
2

アプリケーション仕様ファイルへのパスを追加できます。

Analysisオブジェクトではpathex=['C:\Python27\libs\', 'C:\Python27\Lib\site-packages']、 、およびその他のパスを指定できます...

パスが見つからなくても問題はありません... Linuxからのパスもそこにあります。

于 2013-03-05T15:06:41.937 に答える
1

ディレクトリを削除してから'__pycache__'、exeファイルを再度実行してください。それは私のためにうまくいった

于 2021-08-03T14:15:10.177 に答える
0

上記の答えはどれもうまくいきませんでしたが、うまくいきました。私はopenpyxlを使用していましたが、datetime.pyモジュールにjdcalが必要でした。非表示のインポートやこれらの方法はどれも役に立たず、exeを実行してもjdcalが見つからないと言われます。私が使用した回避策は、いくつかの関数を jdcal から openpyxl コードの datetime.py に直接コピーすることでした。それから走った pyinstaller -F program.py

そしてそれはうまくいきました!

于 2015-10-21T13:52:46.657 に答える
0

同様の問題がありました。PyQt5、cffi、python 3.4.3 の私の修正は次のとおりです。

これにより、'sip' not found エラーと '_cffi_backend' エラーが発生した場合は修正されます。

# -*- 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 )

上記の「pathex」と「hiddenimports」を見てください。これらは、生成されたデフォルトからの唯一の変更です。次を使用してexeをビルドします。

pyinstaller LightShowApp.spec -F

私はそれをvenvまたはpip-winの外で実行しました-そのがらくたの目的は何でも!

于 2016-04-19T20:32:13.917 に答える
0

エグゼキュータは、ライブラリの場所、「C:\Python27\Lib\site-packages」などを知りません。したがって、pyinstaller は、実行可能ファイルの作成時にモジュールの場所をバインドします。したがって、使用したすべてのモジュールをプログラムにインポートする必要があります。

「_socket」モジュールをメイン ファイルにインポートし、pyinstaller を使用して再コンパイルします。

私はおそらく働くでしょう。

注:ただし、システムにインストールされ、プログラムで使用されるモジュールのバージョンは互換性がなければなりません。

于 2020-10-30T18:10:03.847 に答える