首页 > 解决方案 > pyinstaller 未创建 .exe(错误:无法创建 base_library.zip!)

问题描述

我在 .py 文件上有一个小程序,它从两个单独的 .xlsx 文件中获取数据,使用 pandas、numpy 处理数据,然后在同一目录中创建一个新文件,并重命名 + 移动其中一个旧文件使用 os 和 shutil(如下所示)

worked_file_name, worked_file_name_extension = os.path.splitext("Main data file.xlsx")
cwd = os.getcwd()

for filename in os.listdir(cwd):
    if filename == worked_file_name+worked_file_name_extension:
        shutil.move(os.path.join(cwd, worked_file_name+worked_file_name_extension), os.path.join(cwd + "\Old_files", worked_file_name + " " + str(variable) + worked_file_name_extension))

variable是来自系列中的一个值的列表Main data file.xlsx

现在,当我pyinstaller --onefile -w py_file_no_spaces.py在 CMD 中运行(以管理员身份运行 CMD;路径或文件名上没有空格)时,我收到以下错误:

C:\Users\Usuario\Documents\subfolder\subfolder>pyinstaller --onefile -w py_file_no_spaces.py
93 INFO: PyInstaller: 4.2
93 INFO: Python: 3.8.6
93 INFO: Platform: Windows-10-10.0.18362-SP0
94 INFO: wrote C:\Users\Usuario\Documents\subfolder\subfolder\py_file_no_spaces.spec
97 INFO: UPX is not available.
99 INFO: Extending PYTHONPATH with paths
['C:\\Users\\Usuario\\Documents\\subfolder\\subfolder',
 'C:\\Users\\Usuario\\Documents\\subfolder\\subfolder']
125 INFO: checking Analysis
126 INFO: Building Analysis because Analysis-00.toc is non existent
126 INFO: Initializing module dependency graph...
132 INFO: Caching module graph hooks...
142 WARNING: Several hooks defined for module 'win32ctypes.core'. Please take care they do not conflict.
147 INFO: Analyzing base_library.zip ...
2894 INFO: Processing pre-find module path hook distutils from 'C:\\Users\\Usuario\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python38\\site-packages\\PyInstaller\\hooks\\pre_find_module_path\\hook-distutils.py'.
2895 INFO: distutils: retargeting to non-venv dir 'C:\\Program Files\\WindowsApps\\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\\lib'
4975 INFO: Caching module dependency graph...
5422 ERROR: base_library.zip could not be created!
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 194, in _run_module_as_main
    return _run_code(code, main_globals, None,
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\lib\runpy.py", line 87, in _run_code
    exec(code, run_globals)
  File "C:\Users\Usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\Scripts\pyinstaller.exe\__main__.py", line 7, in <module>
  File "C:\Users\Usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PyInstaller\__main__.py", line 114, in run
    run_build(pyi_config, spec_file, **vars(args))
  File "C:\Users\Usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PyInstaller\__main__.py", line 65, in run_build
    PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
  File "C:\Users\Usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PyInstaller\building\build_main.py", line 725, in main
    build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
  File "C:\Users\Usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PyInstaller\building\build_main.py", line 672, in build
    exec(code, spec_namespace)
  File "C:\Users\Usuario\Documents\subfolder\subfolder\py_file_no_spaces.spec", line 6, in <module>
    a = Analysis(['py_file_no_spaces.py'],
  File "C:\Users\Usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PyInstaller\building\build_main.py", line 242, in __init__
    self.__postinit__()
  File "C:\Users\Usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PyInstaller\building\datastruct.py", line 160, in __postinit__
    self.assemble()
  File "C:\Users\Usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PyInstaller\building\build_main.py", line 350, in assemble
    create_py3_base_library(libzip_filename, graph=self.graph)
  File "C:\Users\Usuario\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\PyInstaller\depend\utils.py", line 67, in create_py3_base_library
    with zipfile.ZipFile(libzip_filename, mode='w') as zf:
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\lib\zipfile.py", line 1251, in __init__
    self.fp = io.open(file, filemode)
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\Usuario\\Documents\\subfolder\\subfolder\\build\\py_file_no_spaces\\base_library.zip'

我认为最后一个错误(PermissionError: [Errno 13] Permission denied:)不一定是我应该关注的,因为它与ERROR: base_library.zip could not be created!(没有创建 zip 文件,因此无法读取)有关

对或错,我按照这个假设进行,并且已经解决了一些相关的问题,但还没有找到解决方案。到目前为止,我尝试过:

在查看PyInstaller Can't create base_library.zip后,我确实发现了一个特点——当我print(os.path.exists('C:\\Python38-32\\build'))在我的 IDE 上运行时,我得到了False——此外,print(os.listdir('C:\\Python38-32'))输出['DLLs', 'Doc', 'include', 'keras-master', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'python3.dll', 'python38.dll', 'pythonw.exe', 'Scripts', 'tcl', 'tensorflow-master', 'Tools', 'vcruntime140.dll']

如您所见,我已将 python 直接安装到 C ( C:\python38-32) 中...我不知道是否 a) 我应该/是一个好主意(不知道为什么我将它安装在那里坦率地说),或者 b) 它是影响整个过程。浏览完错误消息后,我很好奇并尝试进入C:\Program Files\WindowsApps,但我得到了You don't currently have permission to access this folder

也不考虑 python 安装是一个问题,因为现在似乎支持 3.8,SO 中的许多问题似乎与

我仍在学习,但我非常专注于使用 pandas 进行这些类型的数据操作,所以这些类型的问题对我来说完全陌生。任何帮助将非常感激!

标签: pythonpyinstaller

解决方案


最后,这似乎是软件包安装/ Windows 文件夹访问的问题。为了解决这个问题,我必须在我的 .py 文件所在的文件夹中创建一个虚拟环境,然后,一旦激活了 venv,就调用pyi-makespec --onefile test.py- 之后,确保 .spec 文件具有所有正确的信息(在这篇文章之后在运行它之前,特别是关于datas和) 的建议。hidden_exports完成后,可以在 dist 文件夹中找到 .exe 文件


推荐阅读