2015-08-20 2 views
-1

У меня возникли проблемы с юникодом python, поэтому я переустановил python на/usr/local/bin/python с опцией «--enable-unicode = ucs4». Я добавил к ~/.bashrc все пути к модулям python, и когда я запускаю как обычный пользователь, я могу импортировать модули, но когда я как суо, я не могу.Поведение Strange PYTHONPATH как sudo (Ubuntu)

[email protected]:~$ /usr/local/bin/python 
Python 2.7.6 (default, Aug 20 2015, 11:57:25) 
[GCC 4.8.4] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy 
>>> 
[email protected]:~$ sudo /usr/local/bin/python 
Python 2.7.6 (default, Aug 20 2015, 11:57:25) 
[GCC 4.8.4] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import numpy 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named numpy 
>>> 
+0

Прежде, чем кто-нибудь ответит: у вас есть * сильная * причина запуска Python как root? В противном случае уменьшите его привилегии и установите необходимые пакеты в virtualenv. – Makoto

+0

Используется, когда я пытаюсь установить модуль python. –

+0

Вы устанавливаете модуль для локальной разработки? Есть ли что-то, что мешает вам перейти на виртуальный? – Makoto

ответ

1

Как указано в их названии, переменные окружающей среды назначаются вашему собственному пользователю. Это означает, что если вы используете программу как root (используя sudo), они не будут «назначены» для программы, поскольку она выполняется в среде пользователя root. Произведение вокруг установить переменные окружения после команды SUDO как это: sudo env PATH=$PATH VAR1=SOME_VALUE VAR2=SOME_VALUE

В ответ на this вопрос указывает на то, вы можете добавить этот экспорт в вашем ./bashrc в качестве обходного пути:

alias sudo='sudo env PYTHONPATH=[PATH] PYTHON=[OTHERPATH] ... ./thescript.py

Кроме того, как упоминалось в комментариях, убедитесь, что вам нужно запустить python как sudo, так как это не рекомендуется, если не требуется ДЕЙСТВИТЕЛЬНО.

+0

Я попробую. Эта команда находится на setup.py модуля python. –

+0

Извините. Я не уверен, что мне нужно. что я уже запускал пакет ./runsetup.py -sudo пакета, и у меня не было проблем с импортом.Почему это меняет? У меня много PYTHONPATH моего пользователя, который может использовать установка.Если я использую '- -sudo 'У меня возникла эта проблема, и когда я запускаю только «./runsetup.py», я не получил разрешения на создание файла «.so». –

+0

Опять же, переменные окружения, такие как PYTHONPATH, назначаются всем программам, которые работают на одном и том же пользователе который экспортирует переменную. Когда вы запускаете программу с использованием sudo, вы запускаете программу как пользовательский «root», а не ваш собственный пользователь. Это означает, что если у вашего собственного пользователя на компьютере переменная PYTHONPATH равнялась '/ user/env/python' (например), когда вы запускаете программу с использованием sudo, она не будет доступна. ВАМ ДОЛЖЕН ЭКСПОРТИРОВАТЬ ЭТУ ПЕРЕМЕННУЮ В ОКРУЖАЮЩЕЙ СРЕДЕ. именно поэтому вы «экспортируете» их (устанавливаете их) при запуске программ с использованием sudo. Теперь ясно? – matan7890

Смежные вопросы