2008-11-17 70 views
5

問題很簡單:如何向PYTHONPATH添加冒號目錄?

使用bash,我想添加一個目錄到我的PYTHONPATH中,以方便腳本執行。不幸的是,我想要使用的目錄有一個:in。所以我嘗試以下每種方法

export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.com:3344/ 
export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.com\:3344/ 
export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com:3344/" 

這些都不起作用。每一次,路徑都被創建爲Python中路徑上的兩個獨立目錄。 我的問題是,是否有可能爲bash做到這一點? 如果是這樣,那麼需要什麼語法?

+7

從而使爲什麼不只是重命名您的文件夾?或完全刪除? – 2008-11-17 10:16:46

+1

@OJ:很好的問題!我可以提出評論。 – 2008-11-17 12:01:28

回答

8

的問題不是在bash。它應該正確地設置你的環境變量,完成:字符。

的問題,而是與PYTHONPATH變量的Python的解析。繼PATH variable樹立的榜樣,似乎沒有轉義字符可言,所以沒有辦法讓它解釋:爲除隔膜以外的東西。你可以在Python interpreter source code中看到它。

唯一的解決辦法是,幾個人已經提到的,使用符號鏈接或別的東西,讓你給一個冒號少名稱爲您的目錄。

2

只有一個你沒有嘗試:

export PYTHONPATH=${PYTHONPATH}:"/home/shane/mywebsite.com\:3344/" 

的問題是不帶引號的轉義直接解釋,並轉換成文字:字符串「」。但是「:」需要稍後評估。

$ echo "foo:" 
foo: 
$ echo \:foo 
:foo 
$ echo ":foo" 
:foo 
$ echo "\:foo" 
\:foo 

我不能保證這會解決你的python-path問題,但它會把\ literal轉換成字符串。

1

我不知道你想要的是否是直接可能的,但是如果你使用的是linux文件系統,一個解決方法是創建一個符號鏈接到你的「coloned」目錄,並將這個符號鏈接添加到你的PYTHONPATH中:

ln -s /home/shane/mywebsite.com\:3344 /home/shane/mywebsite.3344 
export PYTHONPATH=${PYTHONPATH}:/home/shane/mywebsite.3344 
0

符號鏈接黑客可能是唯一可行的選擇,除非有一些啓發式來確定如何處理PYTHONPATH中的冒號。

0

的OP試圖用一個端口號添加到URL的文件路徑列表。這種類型的URL不是文件路徑,所以python永遠不會在該位置找到python文件。將具有端口號的URL放入PYTHONPATH中沒有任何意義。

無論如何,有些人可能因爲在下面的這個問題,結束了:

在Windows路徑具有驅動器代號後跟一個冒號,就像C:/Python27/lib。在Windows上bash,那麼你可以添加多個路徑PYTHONPATH像這樣一個分號「:」被替換爲別的東西

$ export PYTHONPATH="C:\MYPATH1;C:\MYPATH2" 
$ python -i 
Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import sys 
>>> sys.path 
['', 'C:\\MYPATH1', 'C:\\MYPATH2', 'C:\\Windows\\system32\\python27.zip', 'C:\\Python27\\DLLs', 'C:\\Python27\\lib', 'C:\\Python27\\lib\\plat-win', 'C:\\Python27\\lib\\lib-tk', 'C:\\Python27', 'C:\\Python27\\lib\\site-packages', 'C:\\Python27\\lib\\site-packages\\win32', 'C:\\Python27\\lib\\site-packages\\win32\\lib', 'C:\\Python27\\lib\\site-packages\\Pythonwin']