2012-01-30 49 views
1

奇怪的事情...... 我是工作在不同的文件夾導入文件.. ,並正在對Python的IDE ..是有可能的東西在Python IDE工作,但不是在腳本

所以我的IDE代碼:

>>> import os 
>>> os.chdir("..") 
>>> os.chdir("lib") 
>>> os.chdir("native") 
>>> os.getcwd() 
'/.../.../Programming/lib/native' 
>>> from category import * 

的偉大工程.. 但在我的Python文件完全相同:

import os 
import sys 
#get current working directory 
cur_dir = os.getcwd() 
#move up one level 
os.chdir("..") 
new_cur_dir = os.getcwd() 
print new_cur_dir 
#move down to native 
try: 
os.chdir("lib") 
print os.getcwd() 
except IOError as e: 
    sys.exit("Exitting: 'lib' folder missing!!") 

try: 
os.chdir("native") 
print os.getcwd() 
from category import * 
from pilottest import * 
from datainstance import * 
from similar import * 
from collections import defaultdict 
from item import * 
from pilottest import * 
from infernumber import * 

except IOError as e: 
      sys.exit("Exitting: 'native' folder missing!!") 

錯誤:

/../../Programming 
/../../Programming/lib 
/../../Programminglib/native 
Traceback (most recent call last): 
File "foo.py", line 25, in <module> 
    from category import * 
ImportError: No module named category 

回答

3

在解釋器中運行代碼時,第一個條目sys.path是一個空字符串,它表示當前目錄。但是,當您從文件運行代碼時,sys.path的第一個條目是您從中運行腳本的目錄的完全限定路徑。

這意味着,當您在解釋器中更改目錄時,您始終可以從當前目錄執行導入,但從文件運行也是如此。

如果您希望始終能夠從當前目錄中導入腳本中的以下行添加到文件的頂部:

import sys 
sys.path.insert(0, '') 
+0

偉大的偉大的偉大// :)感謝您的建議..是否有任何文件,我可以尋找python iterpretator和腳本之間的區別..我一直認爲,無論在interp retator也可以在腳本中工作 – Fraz 2012-01-30 19:41:01

+1

@Fraz - 我不知道解釋器和運行腳本之間存在任何差異的完整列表,但http://docs.python.org/tutorial/interpreter.html包含大部分相關信息。 – 2012-01-30 19:57:27

+0

爲什麼選擇投票? – 2012-01-30 20:01:23

1

如果您確實想要更改模塊搜索路徑,請擴展sys.path列表。不建議更改目錄。

+0

嗨..我不希望建立一個絕對路徑。 。因爲代碼將移動到不同的機器..並且想要執行相對路徑設置..從當前目錄中查找庫.. :(因此,此嘗試 – Fraz 2012-01-30 19:37:31

+1

沒有任何東西不能阻止您在sys中包含相關目錄。路徑' – 2012-01-30 19:56:33

相關問題