2015-08-16 54 views
0

新使用sys.path啓用從另一個目錄模塊導入,所以我敢肯定這是一個noob問題,但:使用sys.path.insert沒有明確的絕對路徑

是否可以不必使用當使用sys.path訪問另一個目錄中的Python腳本時,是完整/顯式還是絕對文件路徑,而是隻提供模塊文件結構本地的目錄路徑?

目前,我有以下目錄結構:

MyModule/ 
    NAME/ 
     __init__.py 
    bin/ 
     userinfo.py 
     __init__.py 
    docs/ 
    setup.py 
    tests/ 
     NAME_tests.py 
     __init__.py 

內setup.py文件,我把它導入userinfo.py腳本,它只是要求用戶在安裝過程中的一些信息。在setup.py文件,調用該userinfo.py腳本的線條看起來像這樣:

import sys 
sys.path.insert(0, '/Users/malvin/PythonDev/projects/MyModule/bin') 
import userinfo 

這工作得很好,因爲我知道那裏的userinfo.py文件是整個文件路徑,但顯然這並沒有一個人誰的工作試圖安裝模塊,因爲(顯然)沒有辦法預測用戶系統上的文件路徑。

我的問題:有沒有一種方法,其中我可以導入userinfo.py文件(生活在/bin文件夾中),而無需對整個系統的文件路徑(即去一路攀升至/Users)?換句話說,我想只是有這樣的東西:

import sys 
sys.path.insert(0, 'MyModule/bin') 
import userinfo 

但我知道這是行不通的。

+0

查找到'setuptools'和'virtualenv'。 – Cyphase

回答

1

您可以使用當前工作目錄的點(./)表示法來建立相對路徑。

例如:

(syspathinsert)macbook:syspathinsert joeyoung$ pwd 
/Users/joeyoung/web/stackoverflow/syspathinsert 
(syspathinsert)macbook:syspathinsert joeyoung$ tree 
. 
├── MyModule.py 
└── bin 
    ├── userinfo.py 
    └── userinfo.pyc 

1 directory, 3 files 
(syspathinsert)macbook:syspathinsert joeyoung$ cat ./bin/userinfo.py 
def say_hello(): 
    print "hello there" 

(syspathinsert)macbook:syspathinsert joeyoung$ cat MyModule.py 
import sys 
sys.path.insert(0, './bin') 
import userinfo 

userinfo.say_hello() 
(syspathinsert)macbook:syspathinsert joeyoung$ python MyModule.py 
hello there 
+0

我見過很多關於sys.path.insert vs sys.path.append的爭論,在這種情況下最好用什麼? – AdjunctProfessorFalcon

+1

我真的沒有太多的使用經驗,因爲我嘗試在我的所有項目中使用virtualenv。我個人會去這樣的事情:http://stackoverflow.com/questions/10738919/how-do-i-add-a-path-to-pythonpath-in-virtualenv –