Come ottenere le autorizzazioni corrette per i file dalle installazioni dei pip Macports?

2

Macports imposta la proprietà della propria directory dei pacchetti di siti Python come root.wheel con permessi leggibili. I pacchetti Python instally tramite port install hanno lo stesso

# 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

Questo ovviamente impedisce ai singoli utenti di usare i pip install per aggiungere pacchetti, il che va bene dato che dovrebbe essere fatto come root.

Tuttavia, se si usa sudo o una shell di root in pip install , i pacchetti vengono installati da pip come leggibile solo da 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

Questo preclude al mio account utente di importare o utilizzare effettivamente il pacchetto (*).

Come posso ottenere pip per inserire sempre autorizzazioni ragionevoli sui pacchetti installati?

Aggiorna (modifica)

Ho riformulato la domanda per sottolineare che riguarda solo pip installazioni. Vorrei anche sottolineare che il problema è non che richiede il permesso di scrittura sui moduli. Il problema è che i moduli vengono installati senza autorizzazioni read .

(*) Un trucco per risolvere il problema è di chmod a+rX le autorizzazioni appropriate (744/755) sui file del pacchetto appena installato

Aggiornamento 2 (soluzione)

Come suggerito da Mark e Ian e confermato in un test rapido, questo ha a che fare con umask per root. Ecco la documentazione su come modificare /etc/sudoers per OSX. Nota che non è necessariamente una buona idea cambiare la umask per tutte le istanze sudo!

    
posta Brian B 08.03.2015 - 17:19
fonte

1 risposta

2

Puoi usare virtualenv per creare una "copia" locale dell'installazione Python che è di proprietà e facilmente manipolata da te . Il vantaggio dell'utilizzo di virtualenv è che puoi creare molte copie della stessa versione di Python, ma con diverse versioni di pacchetti simili installati, e quindi passare da una all'altra con la riga di comando virtualenv.

Questo ti consente di utilizzare diverse versioni di librerie in diversi progetti o librerie incompatibili.

Per installare virtualenv:

sudo pip install virtualenv

E ora puoi usarlo da solo, senza sudo, per creare un python virtuale di tua proprietà:

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

Ad esempio:

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

Puoi installare virtualenv nella tua directory ~ se vuoi un python predefinito che controlli essere disponibile in qualsiasi momento in questo modo:

cd ~
virtualenv venv

E ora hai ~/venv/bin/pip a tua disposizione. Puoi modificare ~/.bash_profile e aggiungere:

source venv/bin/activate

Proprio alla fine di esso per avere il tuo virtualenv disponibile per impostazione predefinita nella tua shell.

    
risposta data 08.03.2015 - 18:32
fonte

Leggi altre domande sui tag