2014-08-27 111 views
6

我想使用hg本身的mercurial存儲庫。也就是說,我從https://www.mercurial-scm.org/repo/hg克隆了Mercurial,並想在克隆的存儲庫中運行一些hg命令。問題是,當在這個克隆內運行hg時,hg可執行文件嘗試從這個目錄加載它的python模塊,而不是從/usr/lib/pythonVERSION等。據我所知,這是因爲Python導入路徑sys.path包含一個空字符串作爲第一個條目,可能意味着「current目錄」。 PYTHONPATH環境變量未設置。如何從python導入路徑中刪除當前目錄

問題是我該如何防止我安裝的hg導入「錯誤」的模塊。

+0

'sys.path.insert(0,「/ usr/lib/pythonVERSION」)'? – 2014-08-27 20:10:30

+0

我應該把它放在哪裏?我不想修改系統'hg'腳本。 – ragol 2014-08-27 23:12:29

回答

0

@ragol,我認爲Padraic有正確的解決方案。在您嘗試運行hg命令的python腳本中,需要包含以下命令:sys.path.insert(0,"/usr/lib/pythonVERSION")

將命令放在python腳本的開頭。該命令告訴python在導入模塊時首先查找/usr/lib/pythonVERSION目錄。

如果這不起作用,您可能需要更具體的路徑。例如,如果你嘗試導入模塊位於/usr/lib/pythonVERSION/site-packages/hg目錄,你可以使用下面的命令:sys.path.insert(0,"/usr/lib/pythonVERSION/site-packages/hg")

+1

我嘗試運行的腳本是'/ usr/bin/hg',它本身就是mercurial。可能是我沒有正確理解你,但似乎你建議修改它。這當然是最簡單的解決方案,但這意味着我會修改由包管理器安裝的文件。我不喜歡這個想法。我寧願寫一個外部腳本,以這樣的方式調用'/ usr/bin/hg',它不會從當前目錄加載模塊。 – ragol 2014-08-28 16:50:43

+0

你正在運行的腳本的名稱是什麼?它是否有.py擴展名?即時通訊假設你已經創建或編輯了一些python腳本,並試圖導入一個名爲mercurial的模塊。我建議的是在你嘗試導入mercurial模塊的行之前包含sys.path.insert命令。 – rolb 2014-08-28 17:06:51

+1

@rolb他必須告訴你多少次?他正在運行'/ usr/bin/hg',作爲一個可執行文件。它可能是一個實際的可執行文件,它可能是一個帶有shebang的腳本。它沒有任何擴展名,它們在UNIX中不是必需的。 – 2017-12-05 02:27:52

1

我會處理的議題的方式是通過創建一個具有下列內容的/usr/local/bin/hg sh腳本:

#!/bin/sh 
PYTHONPATH=/usr/lib/pythonVERSION/site-packages /usr/bin/hg 

(基於Ubuntu的distributives使用dist-packages代替site-packages

PYTHONPATH是Python解釋器的尊重,以獲得額外的模塊導入路徑的特殊的環境變量。

或者,您可以將PYTHONPATH導出到您的shell中,但它會影響您的整體體驗。