当前位置: 首页 > 知识库问答 >
问题:

PermissionError:[Errno 13]权限被拒绝:pyinstaller.exe/zipcodeswindows 10

闻枫
2023-03-14

我试图将一个python模块(zipcodes)包含到一个转换为EXE的程序中。第一次尝试-包含模块数据的bz2文件未加载-因此我更改了命令行以将该数据拉入。

测试程序非常简单,代码如下(ziptest.py):

import zipcodes
print('Test message')
checkzip=zipcodes.matching('92688')
print(checkzip)
print("returned the right record:", checkzip[0]['zip_code']=='92688')

pyinstaller安装命令是:

pyinstaller --debug all --onefile ziptest.py --add-data "venv\lib\site-packages\zipcodes\zips.json.bz2;zipcodes\zips.json.bz2"

当我运行程序并捕获STDERR时,我认为最相关的代码行是:

import 'json.encoder' # <_frozen_importlib_external.SourcelessFileLoader object at 0x0000019824E121C8>
import 'json' # <_frozen_importlib_external.SourcelessFileLoader object at 0x0000019824E018C8>
Traceback (most recent call last):
  File "ziptest.py", line 1, in <module>
  File "<frozen importlib._bootstrap>", line 983, in _find_and_load
  File "<frozen importlib._bootstrap>", line 967, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 677, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 728, in exec_module
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "c:\users\ken\onedrive - rootdir\code\companyppi-scripts\temp_dir\validation\venv\lib\site-packages\zipcodes\__init__.py", line 32, in <module>
    with bz2_open(_zips_json, "rb") as f:
  File "C:\Users\ken\AppData\Local\Programs\Python\Python37\lib\bz2.py", line 318, in open
    binary_file = BZ2File(filename, bz_mode, compresslevel=compresslevel)
  File "C:\Users\ken\AppData\Local\Programs\Python\Python37\lib\bz2.py", line 92, in __init__
    self._fp = _builtin_open(filename, mode)
PermissionError: [Errno 13] Permission denied: 'C:\\Users\\ken\\AppData\\Local\\Temp\\_MEI65962\\zipcodes\\zips.json.bz2'
[10396] LOADER: Cleaning up Python interpreter.
# cleanup[3] wiping _codecs

我可能需要根据到目前为止我所看到的研究为这个模块编写一个钩子,但在深入研究之前,我想确保这是正确的路径。我必须相信还有其他模块可以从模块安装中获取源数据,所以我想让我的方法适合解决这个问题。

共有1个答案

上官华池
2023-03-14

我的同事帮我弄明白了这一点——首先是在Linux上,然后我在Windows上得到了一个工作版本。

本文给出了问题所在以及如何解决的指针:
使用onefile选项在PyInster中添加数据文件

给出第一个答案-我修改了init.py文件,通过将此函数添加到代码中并替换第31行中的这一行来实现“PyInstaller”:

def resource_path(relative_path):
    """ Get absolute path to resource, works for dev and for PyInstaller """
    try:
        # PyInstaller creates a temp folder nad stores path in _MEIPASS
        base_path = sys._MEIPASS
    except Exception:
        base_path = os.path.abspath(".")

    return os.path.join(base_path, relative_path)
    
_zips_json = resource_path(os.path.join(os.path.dirname(os.path.abspath(__file__)), "zips.json.bz2"))

我更新了EXE生成命令行,如下所示:

pyinstaller --onefile ziptest.py  --add-data ".\venv\Lib\site-packages\zipcodes\zips.json.bz2;zipcodes"

这将创建我希望创建的单一文件EXE。

我也去了邮政编码项目,并发布了这个补丁,希望他们能将其合并,使他们的代码PyInstaller兼容。

 类似资料:
  • 问题内容: 我试图在Docker容器上运行django应用程序。 执行了https://docs.docker.com/compose/django/上提到的步骤,但是运行命令后, 我遇到错误PermissionError:[Errno 13]权限被拒绝:’/code/manage.py’我正在使用centos 7。请帮忙 问题答案: 问题是在centos 7上启用了SELinux。它在这里起作用

  • 问题内容: 当我尝试运行简单的docker命令时,例如: 我收到一条错误消息: 获得权限被拒绝… /var/run/docker.sock:connect:权限被拒绝 当我检查权限 我看到这一行: 因此,我遵循许多论坛的建议并将本地用户添加到docker组: 但这无济于事。我仍然收到非常相同的错误消息。我该如何解决? 问题答案: 对于那些刚接触shell的人,命令: 需要在您的外壳中定义。默认情况

  • 问题内容: 尝试显示URI时出现以下异常。我认为这是在我的活动停止后发生的,我尝试再次访问可行的URI。还有其他问题可以解决这个问题,但是我对如何对我的代码应用任何解决方案感到非常困惑,因为我的takePhotoIntent允许拍照或从图库中选择图片(如下所示)。 我的createImageFile和我的takePhotoIntent: 问题答案: 根据Storage Access Framewo

  • 问题内容: 我对编码比较陌生,遇到了麻烦。 我有这段代码可以将数据发送到Firebase 但是,我不断收到错误: FIREBASE警告:设置为/ users /(GoogleID)失败:Permission_denied 2016-05-23 22:52:42.707 firebase.js:227未捕获(承诺)错误:PERMISSION_DENIED:权限被拒绝(…) 当我尝试查找时,它谈论的是

  • 问题内容: 很抱歉来到这里问这个问题,但是我已经读完了所有互联网,试图找到解决方案,但是我仍然遇到这个问题… 我已经成功安装了Jenkins(让我在仍有希望的时候开始)可以在我们的持续集成流程中使用它。 我试图从这样一个简单的例子开始: 但是每次启动时,都会出现此错误: 问题在于用户jenkins(服务和主节点以Jenkins的身份运行)拥有此存储库上的所有权限。我试图授予组和其他人读取和执行的权

  • 问题内容: 我正在尝试将查询写入文件以进行调试。该文件位于中。我要写入的文件是。 我正在尝试使用 但是我越来越 file_put_contents(queries.txt)[function.file-put-contents]:无法打开流:权限被拒绝 我的文件chmod’d为777,可能是什么问题? 问题答案: 尝试调整目录权限。 在终端上运行(从包含数据库文件夹的目录中运行) apache,如