#python #python-3.x #reactjs #macos-high-sierra
#python #python-3.x #reactjs #macos-high-sierra
Вопрос:
Я работаю с чужим кодом, и я не могу запустить его локально (я также не могу спросить человека, который в данный момент недоступен). У меня есть main.py
файл со следующим кодом:
import os
from tiger_server import constants
from tiger_server.web_server import WebServer
if not os.path.exists(constants.RESULTS_PATH):
os.makedirs(constants.RESULTS_PATH)
WebServer.start_web_server()
RESULTS_PATH
является "/usr/share/tiger/instance"
Когда я пытаюсь запустить main.py
из своей командной строки, я получаю следующую ошибку:
File "main.py", line 6, in <module>
os.makedirs(constants.RESULTS_PATH) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/os.py",
line 213, in makedirs
makedirs(head, exist_ok=exist_ok) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/os.py",
line 213, in makedirs
makedirs(head, exist_ok=exist_ok) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/os.py",
line 223, in makedirs
mkdir(name, mode) PermissionError: [Errno 13] Permission denied: '/usr/share/tiger'
Кажется, код пытается создать новый каталог, но как я могу найти его, чтобы разобраться с его разрешениями? Связано ли это с его разрешениями для начала?
У меня есть эти разрешения на main.py файл и его каталог (ME — это мое имя пользователя, поэтому кажется, что файл принадлежит мне):
-rw-r--r-- 1 ME staff 211 Aug 13 14:40 main.py
Я попытался отключить SIP с помощью csrutil disable
. Прежде чем я это сделал, я получал другую ошибку:
PermissionError: [Errno 1] Operation not permitted: '/usr/share/tiger'
Может кто-нибудь сказать мне, как действовать, чтобы иметь возможность запускать файл?
Комментарии:
1. Пользователи обычно не имеют прав на запись
/usr/share
. Вы могли бы сделатьls -ld /usr/share
, чтобы проверить и посмотреть, существует ли группа, отличная от root. Для создания каталога вам понадобятся какие-то повышенные права. Возможно, этот другой пользователь добавил эти права или находится в группе с этими правами.getfacl /usr/share
может отображаться, были ли добавлены дополнительные элементы управления доступом к каталогу.2. @tdelaney Когда я запускаю,
ls -ld /usr/share
что я получаюdrwxr-xr-x 47 root wheel 1504 Dec 16 2019 /usr/share
. Что это значит?getfacl /usr/share
возвращает команду, которая не найдена. Я клонировал код из репозитория проекта, поэтому создатель кода не работал на моей машине.3. Это означает, что каталог принадлежит пользователю «root», у которого есть полные разрешения, и группе «wheel», у которой есть только разрешения на чтение и сканирование. Это традиционные разрешения unix, но системы обычно имеют более сложные системы разрешений, которые можно использовать. getfacl — это «получить список управления доступом к файловой системе», который наряду с setfacl можно использовать для предоставления мелкозернистого доступа пользователя. Но это работает не на всех системах, и я не знаю конкретно macos. Вы можете найти справку о разрешениях macos на superuser.com
4. Но в результате у вашего пользователя нет разрешений на создание подкаталога в /usr / share.
5. Работает ли это, если вы запускаете свой скрипт от имени root? Это определенно должно произойти после выключения SIP. Кроме того, вы пытались создать каталог вручную с помощью mkdir, чтобы посмотреть, что произойдет?