2011-11-01 54 views
13

編輯:適用於root,sudo是問題所在。參見下文。PYTHONPATH不適用於GNU/Linux上的sudo(適用於root)

我有一個包含我自己的庫的目錄,例如我的Python庫位於/home/name/lib/py
我已通過添加以下行添加此目錄Python的PATH爲所有用戶(包括root用戶)/etc/bash.bashrc

export PYTHONPATH=$PYTHONPATH:/home/name/lib/py 

它適用於所有用戶(包括root)。但它不適用於sudo。有什麼辦法可以讓sudo使用/etc/bash.bashrc

編輯:更多的信息:

我已經添加到PYTHONPATH sudoers文件,像這樣:Defaults env_keep += "HOME PYTHONPATH"。它sitll不起作用。

env | grep PYTHON: 
    PYTHONDONTWRITEBYTECODE=1 
    PYTHONPATH=/home/name/lib/py 

sudo env | grep PYTHON: 
    PYTHONDONTWRITEBYTECODE=1 

sudo echo $PYTHONPATH: 
    /home/name/lib/py 
+1

你也可以嘗試[su],我認爲這不需要遷移。 – brc

+2

特別是在您編輯時,問題與'sudo'相關,而不是任何Python特定的問題,這可能會在SU提到更多有用的答案,或者在unix.stackexchange.com上提供。 – agf

+0

@brc現在我意識到了。我已經修復它 - 看到我的答案吼叫。 – usr

回答

11

在我的情況下,解決方法是從sudoers中刪除Defaults !env_reset

但是,我不得不保持Defaults env_keep += "PYTHONPATH"在sudoers。
我實際上添加了Defaults env_reset(它重置了環境變量),但它仍然有效,因爲env_keep

看來env_keep!env_reset與彼此衝突,但這只是一個猜測。


所以,整個過程:

  1. 添加export PYTHONPATH=/your/custom/path~/.bashrc/etc/bash.bashrc
  2. 在sudoers中添加PYTHONPATHDefaults env_keep += "ENV1 ENV2 ..."文件
  3. 從sudoers文件刪除Defaults !env_reset文件,如果存在
+1

此解決方案也適用於OS X.只需在OS X上的/ etc/sudoers中添加一行'Defaults env_keep + =「PYTHONPATH」'。 – user805627

0

這應該可能在其他地方發佈。但sudo默認不會處理環境文件。如果你想調用-i標誌應該幫助你。它會模擬用戶初始登錄。

您可能需要玩弄自己放置變量的位置。 http://linux.die.net/man/8/sudo

+0

sudo -i也不適合我。我認爲sudoers文件中的'!env_reset'選項有些衝突(我認爲它實際上與sudo -i相同)。請參閱我的答案以獲取完整說明 – usr

2

另一個提示:

sudo echo $PYTHONPATH: 
    /home/name/lib/py 

它不會工作。殼將解釋這樣的:

1)從環境變量擴展$ PYTHONPATH例如:/ usr/lib中/蟒

2)執行 「命令回聲/ usr/lib中/蟒」

7

的對於PATH變量也是如此,即使您傳遞了保留環境標誌-E,它也不會進入超級用戶環境。

我現在用這個sudo命令,沒有任何其他的修改:

sudo -HE env PATH=$PATH PYTHONPATH=$PYTHONPATH ./bin/myscript 

因爲它是工作(對我來說)的替代方法,我想我會在這裏分享。

相關問題