【问题标题】:Python - FileNotFoundError for pysvn in calling exe compiled with py2exePython - pysvn 在调用使用 py2exe 编译的 exe 时出现 FileNotFoundError
【发布时间】:2021-07-23 23:50:02
【问题描述】:

py2exe 的 setup.py:

setup(console=['TagProject.py'], options={'py2exe':{'dist_dir':'AriesTools'} } )

当我调用 exe 时,我得到了错误:

Traceback (most recent call last):
  File "TagProject.py", line 7, in <module>
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 664, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 627, in _load_backward_compatible
  File "<frozen zipimport>", line 259, in load_module
  File "pysvn\__init__.pyc", line 116, in <module>
  File "os.pyc", line 1111, in add_dll_directory
FileNotFoundError: [WinError 3] The system cannot find the path specified: 
'H:\\PythonScripts\\AriesTools\\library.zip\\pysvn'

已安装的组件:

Python 3.9.6 (32-bit)
Python 3.9 PySVN 1.9.13-2056 on Win32
py2exe-0.10.4.0-cp39-cp39-win32.whl

我使用相同的过程为其他不使用pysvn的脚本创建exe,并且exe没有显示同样的问题。

【问题讨论】:

  • pyinstaller 可能认为该导入是“隐藏的”。文档中有一个非常有用的部分,称为 When things go wrong
  • 通过调试进一步调查,结果发现错误似乎来自 os.add_dll_direcortory 的压缩路径参数(....\library.zip\pysvn),调用自“import pysvn”在 TagProject.exe 中。仍然不知道如何解决这个问题。
  • 可能是os.add_dll_directory() 不喜欢压缩文件的文件夹。您可以尝试直接在.spec 文件中指定pysvn DLL。这可能会绕过os 调用。如果没有,我认为您的下一步是通过pyinstaller 项目提出问题。

标签: python py2exe setup.py pysvn


【解决方案1】:

添加信息,编译输出:

running py2exe

  4 missing Modules
  ------------------
? UserDict                            imported from pysvn
? _posixshmem                         imported from multiprocessing.resource_tracker, multiprocessing.shared_memory
? readline                            imported from cmd, code, pdb
? resource                            imported from test.support
Building 'AriesTools\TagProject.exe'.
Building shared code archive 'AriesTools\library.zip'.
Copy c:\users\nobody\appdata\local\programs\python\python39-32\python39.dll to AriesTools
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\unicodedata.pyd to AriesTools\unicodedata.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\select.pyd to AriesTools\select.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_bz2.pyd to AriesTools\_bz2.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_lzma.pyd to AriesTools\_lzma.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\pyexpat.pyd to AriesTools\pyexpat.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_socket.pyd to AriesTools\_socket.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_hashlib.pyd to AriesTools\_hashlib.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_decimal.pyd to AriesTools\_decimal.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_ssl.pyd to AriesTools\_ssl.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_queue.pyd to AriesTools\_queue.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_elementtree.pyd to AriesTools\_elementtree.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_ctypes.pyd to AriesTools\_ctypes.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_tkinter.pyd to AriesTools\_tkinter.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_testinternalcapi.pyd to AriesTools\_testinternalcapi.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_testcapi.pyd to AriesTools\_testcapi.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_asyncio.pyd to AriesTools\_asyncio.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_multiprocessing.pyd to AriesTools\_multiprocessing.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\_overlapped.pyd to AriesTools\_overlapped.pyd
Copy C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\_pysvn_3_9.pyd to AriesTools\pysvn._pysvn_3_9.pyd
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_client-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libapriconv-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_fs_fs-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_diff-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libaprutil-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_fs_util-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libapr-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\tk86t.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_fs_x-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_wc-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\libssl-1_1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_subr-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\libffi-7.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_delta-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\libcrypto-1_1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_fs-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_repos-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\Lib\site-packages\pysvn\libsvn_ra-1.dll to AriesTools\
Copy DLL C:\Users\nobody\AppData\Local\Programs\Python\Python39-32\DLLs\tcl86t.dll to AriesTools\
Press any key to continue . . .

【讨论】:

  • 我已经通过删除 pysvn_init_.py 文件中的以下语句解决了这个问题:add_dll_handle = os.add_dll_directory( os.path.dirname( __file__ ) ) 没有这个语句,模块 pysvn 仍然可以正常工作。希望有人能找到比这更好的解决方案。目前,我对此很满意。
【解决方案2】:

我已经通过删除 pysvn\__init__.py 文件中的以下语句解决了这个问题:

add_dll_handle = os.add_dll_directory( os.path.dirname( __file__ ) )

没有这个语句,模块 pysvn 仍然可以正常工作。希望有人能找到比这更好的解决方案。目前,我对此很满意。

【讨论】:

    猜你喜欢
    • 2023-01-13
    • 1970-01-01
    • 2015-05-04
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    相关资源
    最近更新 更多