Como tornar um módulo python instalado utilizável por outro usuário?

2

Estou executando um script bash com php que por sua vez executará um script python, mas recebo muitos erros porque parece que www-data não pode usar os pacotes python que eu instalei para meu próprio usuário. Então, como posso disponibilizar um pacote específico para www-data , é seguro fazer isso? Também é seguro definir www-data como o proprietário de uma subárvore específica de /var/www/html ?

Aqui está o erro que recebo quando executo o seguinte comando:

sudo -u www-data ./bash_script_that_calls_runs_the_pythonscript.sh

Traceback (most recent call last):
  File "./file.py", line 5, in <module>
    from bs4 import BeautifulSoup
ImportError: No module named 'bs4'

Mas se eu correr:

./bash_script_that_calls_runs_the_pythonscript.sh

Tudo vai correr bem.

E também:

~/.local/lib/python3.5/site-packages$ ll | grep bs4
drwxrwxr-x  5 me www-data  4096 Dec  2 15:37 bs4/
drwxrwxr-x  2 me www-data  4096 Dec  2 15:38 bs4-0.0.1.dist-info/

Por favor, note que eu configurei o grupo recursivamente:

$ ll /home/me/.local/lib/python3.5/site-packages/bs4/
total 180
drwxrwxr-x  5 me www-data  4096 Dec  2 15:37 ./
drwx------ 51 me me        4096 Jan 16 04:33 ../
drwxrwxr-x  3 me www-data  4096 Dec  2 15:37 builder/
-rw-rw-r--  1 me www-data 29910 Dec  2 15:38 dammit.py
-rw-rw-r--  1 me www-data  6773 Dec  2 15:38 diagnose.py
-rw-rw-r--  1 me www-data 68798 Dec  2 15:38 element.py
-rw-rw-r--  1 me www-data 20394 Dec  2 15:38 __init__.py
drwxrwxr-x  2 me www-data  4096 Dec  2 15:37 __pycache__/
-rw-rw-r--  1 me www-data 30800 Dec  2 15:38 testing.py
drwxrwxr-x  3 me www-data  4096 Dec  2 15:37 tests/

O mesmo vale para bs4-0.0.1.dist-info/

    
por yukashima huksay 12.02.2018 / 21:50

1 resposta

1

Resposta:

Adicione a opção -H ou -i a sudo :

sudo -i -u www-data ./bash_script_that_calls_runs_the_pythonscript.sh
sudo -H -u www-data ./bash_script_that_calls_runs_the_pythonscript.sh

Explique:

Você pode usar python -m site para verificar os caminhos de importação. Por exemplo, nas saídas de sudo -u www-data python -m site , USER_SITE não é o diretório esperado bs4 instalado.

sys.path = [
    '/',
    '/usr/local/lib/python3.6.2/lib/python36.zip',
    '/usr/local/lib/python3.6.2/lib/python3.6',
    '/usr/local/lib/python3.6.2/lib/python3.6/lib-dynload',
    '/usr/local/lib/python3.6.2/lib/python3.6/site-packages',
]
USER_BASE: '/root/.local' (doesn't exist)
USER_SITE: '/root/.local/lib/python3.6/site-packages' (doesn't exist)
ENABLE_USER_SITE: True

Com sudo -i ou sudo -H , você pode alternar o diretório home para o usuário www-data e encontrar o USER_SITE correto. As saídas de sudo -i -u www-data python -m site podem ser:

sys.path = [
    '/home/www-data',
    '/usr/local/lib/python3.6.2/lib/python36.zip',
    '/usr/local/lib/python3.6.2/lib/python3.6',
    '/usr/local/lib/python3.6.2/lib/python3.6/lib-dynload',
    '/home/www-data/.local/lib/python3.6/site-packages',
    '/usr/local/lib/python3.6.2/lib/python3.6/site-packages',
]
USER_BASE: '/home/www-data/.local' (exists)
USER_SITE: '/home/www-data/.local/lib/python3.6/site-packages' (exists)
ENABLE_USER_SITE: True
    
por Ping Chu Hung 20.02.2018 / 17:34