Як отримати правильні дозволи на файли при встановленні файлів Macports?


2

Macports встановлює право власності на каталог сайтів пакунків Python, як і root.wheelз дозволами, доступними для читання у світі. Пакети Python, встановлені через, port installмають однакові

# ls -l -d /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
drwxr-xr-x  151 root  wheel  5134 Mar  8 10:56 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

Це звичайно заважає окремим користувачам використовувати встановлення pip для додавання пакунків, що просто чудово, оскільки це дійсно повинно бути виконано як root.

Однак якщо для використання використовується sudo або коренева оболонка pip install, пакети встановлюються pipяк читабельні лише root.wheel(740).

% sudo pip install BeautifulSoup
...
% ls -l -d   /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/BeautifulSoup.py
-rw-r-----  1 root  wheel  79567 Mar  8 11:09 /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/BeautifulSoup.py

Це забороняє мій обліковий запис користувача фактично імпортувати або використовувати пакет (*).

Як я можу отримати pip, щоб завжди розміщувати розумні дозволи на встановлені пакети?

Оновити (редагувати)

Я переформулював питання, щоб підкреслити, що мова йде pipлише про встановлення. Я також хотів би тут підкреслити, що проблема полягає не в необхідності дозволу на запис модулів. Проблема полягає в тому, що модулі встановлюються без дозволу на читання .

(*) Хак виправити це - chmod a+rXналежні дозволи (744/755) на щойно встановлені файли пакунків

Оновлення 2 (рішення)

Як запропонували і Марк, і Іан, і підтвердили у швидкому тесті, це пов'язане з umask для root. Ось документація про те, як змінити /etc/sudoersOSX. Зауважте, що необов’язково міняти umask для всіх екземплярів судо!


Дозволи, які ви бачите, є правильними та обґрунтованими. Якщо ви встановлюєте в будь-якому місці, крім домашнього каталогу (e / g / / opt), тоді файли призначені для більш ніж одного користувача, тому вони не повинні записуватися звичайними користувачами. Для окремих користувачів вони повинні налаштувати virtualenv та встановити у свої virtualenvs
Марк

@Mark: Якщо ці дозволи є правильними та розумними, то чому ви вважаєте, що вони відрізняються від дозволів на пакунки, встановлені через port install?
Брайан Б

Вибачте, що я пропустив це - я все одно використовувати virtualenv і встановлюватиму лише в папках каталогів Macports, встановлені Macports, а не pip
Марк

Це просто налаштування umask, яке читається лише користувачем та групою, а не всім (тобто 022). Дивіться це питання ТАК
Марк

Мене починало цікавити, що про умаск теж, тому я сьогодні перевірятиму.
Брайан Б

Відповіді:


2

Ви можете використовувати virtualenv для створення локальної "копії" установки Python, якою ви володієте та легко управляєте вами. Перевагою використання virtualenv є те, що ви можете зробити безліч копій тієї самої версії Python, але з встановленими різними версіями подібних пакетів, а потім перемикатися між ними командним рядком virtualenv.

Це дозволяє використовувати різні версії бібліотек у різних проектах або несумісних бібліотеках.

Щоб встановити virtualenv:

sudo pip install virtualenv

Тепер ви можете використовувати його самостійно, без судо, для створення віртуального пітона, який належить вам:

mkdir -p ~/Development/mypythonproject
cd ~/Development/mypythonproject
virtualenv .venv
source .venv/bin/activate

Наприклад:

IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> which python
/usr/local/bin/python

IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> source .venv/bin/activate

(.venv)
IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> which python
/Users/ian/code/keybase-python/.venv/bin/python

(.venv)
IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> deactivate

IanCsiMac:~/Development/keybase-python |ruby-2.1.2| [git::develop]
> which python
/usr/local/bin/python

Ви можете virtualenv-встановити у своєму ~каталозі, якщо ви хочете, щоб пітон, який ви контролюєте, за замовчуванням був доступний у будь-який час так:

cd ~
virtualenv venv

А тепер вам ~/venv/bin/pipдоступні. Ви можете змінити свої ~/.bash_profileта додати:

source venv/bin/activate

Прямо в кінці цього, щоб ваш virtualenv був доступний за замовчуванням у вашій оболонці.


Я погоджуюсь, virtualenvце приємно (або навіть «Continuum Analytics» conda навіть більше), але це справді відповідає на інше питання. Окрім того, я сумніваюся, чи virtualenvможе справно працювати, коли розглядаються пакунки не читаються. Я перевірю це.
Брайан Б

Я щойно тестувався на Debian Linux (машина OSX не піддається руйнуванню) - virtualenvстворює необроблене середовище без жодного встановленого пакету, тому проблем з дозволами не виникає. Таким чином, можна спробувати встановити scipyі numpyт.д. вручну. ( condaтрохи привітніше про подібні речі)
Брайан Б

@BrianB virtualenvпрацює чудово, якщо пакунки доступні лише для читання. Так, якщо вам потрібні пакети, що підтримуються бібліотеками, складеними С, ви можете спробувати conda(який під кришкою використовує virtualenvсам).
Ян Ч.

це 'є свого роду моєю точкою. Ці пакети встановлюються pipбез дозволу читання. Як ви кажете, лише для читання було б добре! (Я думаю, що багато людей неправильно читають оригінальне запитання і вважають, що я прошу дозволу на написання, тому я зміню акценти).
Брайан Б

@BrianB Я зрозумів, що ти говорив. Це невдалий побічний ефект від використання sudo. Ви можете змінити umaskдля rootтимчасово , коли ви телефонуєте , sudo pip ...так що не відбувається, але ви дійсно хочете , щоб пам'ятати , щоб змінити його назад , коли ви закінчите.
Ян Ч.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.