PermissionError:不允许操作,我无法访问我的照片库(python)

问题描述 投票:0回答:3

我知道有很多这样的问题,但我就是找不到正确的答案。

我已将我的 Mac 更新到 macOS Catalina,我在 IDLE 中使用 Python 3.7.9,但无法访问我的照片库。

import os
os.listdir("/Users/me/Pictures/Photos Library.photoslibrary")

这会引发错误:

Traceback (most recent call last):
  File "/Users/me/mycode.py", line 2, in <module>
    os.listdir("/Users/me/Pictures/Photos Library.photoslibrary")
PermissionError: [Errno 1] Operation not permitted: '/Users/me/Pictures/Photos Library.photoslibrary'

我可以使用终端执行代码:

$ python "/Users/me/mycode.py"

这可行,但我更喜欢在 IDLE 中执行我的代码,但它不起作用。

我执行这个:

$ ls -l "/Users/me/Pictures"

已退回:

drwxrwxrwx@ 13 me group  416 Jan  2 10:10 Photos Library.photoslibrary

在系统偏好设置 > 安全和隐私 > 隐私中, IDLE 已在“完整磁盘访问”和“照片”中,并且两者均带有复选标记。 我还在开发者工具中添加了 Finder。

在终端中我执行了这段代码:

$ sudo chown me:group "/Users/me/Pictures/Photos Library.photoslibrary"

还是不行。

我不知道该怎么做才能解决这个问题。

请帮助我,谢谢。

python permissions photo
3个回答
1
投票

答案:“全磁盘访问”

偶然发现了至少在这里对我有用的答案,https://cleanmymac.com/blog/operation-not-permission-terminal

是从“系统偏好设置 > 安全和隐私 > 隐私 > 全磁盘访问”为终端应用程序提供“全磁盘访问”。 (我使用的是 Macos Monterey“12.4”)

在做上述事情之前,我也同样被难住了!

我只能访问 16 个特殊十六进制目录中的第一个,

"/Users/me/Pictures/Photos Library.photoslibrary/originals/0"
,但神秘的是其他目录都无法访问
1, 2,..., E, F

# (replaced my name with "me" below)
workdir = "/Users/me/Pictures/Photos Library.photoslibrary/originals"
[str(x) for x in (Path(workdir) / "0").glob("*")][:5]

['/Users/me/Pictures/Photos Library.photoslibrary/originals/0/0D1F85D7-627E-49A6-B108-65EF9BB46681.heic',
 '/Users/me/Pictures/Photos Library.photoslibrary/originals/0/0FB4B6E0-22D3-4601-B524-8708A18B1B10.jpeg',
 '/Users/me/Pictures/Photos Library.photoslibrary/originals/0/04122C50-1648-43CC-A325-DDF72C2F1FE3.jpeg',
 '/Users/me/Pictures/Photos Library.photoslibrary/originals/0/048D0DF3-F9D5-4DB6-B1F1-DE1C54A2786F.jpeg',
 '/Users/me/Pictures/Photos Library.photoslibrary/originals/0/082F4E1D-C222-47F3-99EA-9D7501848B6B.jpeg']

迷你旁注

另外,我发现这个,https://github.com/muxcmux/apple-photos-forensics,是一个关于解释的有趣资源

/Users/me/Pictures/Photos Library.photoslibrary/database/Photos.sqlite
,例如当我跑步时,

select * from ZASSET

我得到了 11773 行,其中包含上述文件名作为“ZFILENAME”列。 (所以下面,我只是使用一个函数

run_query
,它使用 python 的内置
sqlite3
来运行查询)

In [153]: sql = "select ZUUID, ZFILENAME from ZASSET  "
     ...: df = run_query("Photos.sqlite", sql)
     ...: print(df.shape)
     ...: df.head()
(11773, 2)
Out[153]: 
                                  ZUUID                                 ZFILENAME
0  54ACC8C9-A682-4A4C-A4F1-E1808DBF8B0A  54ACC8C9-A682-4A4C-A4F1-E1808DBF8B0A.JPG
1  162CBC99-72D3-44AD-AB4E-9FC1909BCFA6  162CBC99-72D3-44AD-AB4E-9FC1909BCFA6.JPG
2  182AD204-814A-4E0E-94D1-6E9D7A9ED26B  182AD204-814A-4E0E-94D1-6E9D7A9ED26B.JPG
3  5C0D5113-9017-4E5A-BB67-EF875F99B906  5C0D5113-9017-4E5A-BB67-EF875F99B906.JPG
4  576C9DCB-71A1-4AEF-A4C8-6EC4B561AFDB  576C9DCB-71A1-4AEF-A4C8-6EC4B561AFDB.JPG

0
投票

我在从 Mac OS Catalina 访问照片库时遇到了同样的问题。 通过设置终端照片完全磁盘访问来解决:“系统设置>隐私和安全>照片>终端 - 完全访问”

我假设使用更有限的“照片”访问权限比为终端提供完整的全磁盘访问权限更安全。


-1
投票

您的 Python 可能无权访问该目录。也许进入并将您的 Visual Studio、终端或 xTerm 设置为具有完整的磁盘访问权限,如本文所述。

https://osxdaily.com/2018/10/09/fix-operation-not-permissed-terminal-error-macos/

© www.soinside.com 2019 - 2024. All rights reserved.