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

variableMain data file.xlsx内某个系列的值的列表

现在,当我运行pyinstaller --onefile -w py_file_no_spaces.py在CMD(运行CMD作为admin;路径或文件名上没有空格)我得到以下错误:

C:UsersUsuarioDocumentssubfoldersubfolder>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:UsersUsuarioDocumentssubfoldersubfolderpy_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 FilesWindowsAppsPythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0librunpy.py", line 194, in _run_module_as_main
return _run_code(code, main_globals, None,
File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0librunpy.py", line 87, in _run_code
exec(code, run_globals)
File "C:UsersUsuarioAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38Scriptspyinstaller.exe__main__.py", line 7, in <module>
File "C:UsersUsuarioAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagesPyInstaller__main__.py", line 114, in run
run_build(pyi_config, spec_file, **vars(args))
File "C:UsersUsuarioAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagesPyInstaller__main__.py", line 65, in run_build
PyInstaller.building.build_main.main(pyi_config, spec_file, **kwargs)
File "C:UsersUsuarioAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagesPyInstallerbuildingbuild_main.py", line 725, in main
build(specfile, kw.get('distpath'), kw.get('workpath'), kw.get('clean_build'))
File "C:UsersUsuarioAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagesPyInstallerbuildingbuild_main.py", line 672, in build
exec(code, spec_namespace)
File "C:UsersUsuarioDocumentssubfoldersubfolderpy_file_no_spaces.spec", line 6, in <module>
a = Analysis(['py_file_no_spaces.py'],
File "C:UsersUsuarioAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagesPyInstallerbuildingbuild_main.py", line 242, in __init__
self.__postinit__()
File "C:UsersUsuarioAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagesPyInstallerbuildingdatastruct.py", line 160, in __postinit__
self.assemble()
File "C:UsersUsuarioAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagesPyInstallerbuildingbuild_main.py", line 350, in assemble
create_py3_base_library(libzip_filename, graph=self.graph)
File "C:UsersUsuarioAppDataLocalPackagesPythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0LocalCachelocal-packagesPython38site-packagesPyInstallerdependutils.py", line 67, in create_py3_base_library
with zipfile.ZipFile(libzip_filename, mode='w') as zf:
File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0libzipfile.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文件创建,因此无法读取)有关

不管是对是错,我都是按照这个假设去做的,我已经研究了一些相关的问题,但还没有找到解决方案。到目前为止,我尝试了:
  • 不使用-w和——onefile
  • 从C:卸载库并将其直接安装到我正在工作的子文件夹中(在观看YouTube视频后,该家伙说全局安装可能会产生问题)
  • 引用。py但在另一个文件夹中创建pyinstaller导致,正如在尝试使用pyinstaller时的权限错误(pyinstaller -w --onefile --name "py_file_no_spaces_tool" "C:UsersUsuarioDocumentssubfoldersubfolderpy_file_no_spaces.py"在.py文件所在的新文件夹之外以admin身份运行CMD)中所建议的那样

在查看PyInstaller Can't create base_library.zip后,我确实发现了一个特性-当我在IDE上运行print(os.path.exists('C:\Python38-32\build'))时,我得到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 FilesWindowsApps,但我得到You don't currently have permission to access this folder

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

有关我还在学习,但我主要集中在使用pandas做这些类型的数据操作,所以这些类型的问题对我来说是完全陌生的。任何帮助将非常感激!

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

中找到。

最新更新