2013-07-31 25 views
1

我遇到了一些腳本,這些腳本是我編寫的用於測試我編寫的測試解析器的路徑問題。看起來Python(27和3)在使用當前工作目錄作爲sys.path的一部分時,並不像IronPython那樣工作。因此,我的內部包裝路徑不起作用。如何解決Python和IronPython中的sys.path差異

這是我的包裝佈局。

MyPackage 
    __init__.py 
    _test 
     __init__.py 
     common.py 
    parsers 
    __init__.py 
    _test 
      my_test.py 

我試圖從MyPackage目錄內調用腳本。

命令行語句:

蟒蛇./parsers/_test/my_test.py

IPY ./parsers/_test/my_test.py

位於我my_test.py文件import語句是。

from _test.common import TestClass 

在Python情景我只得到MyPackage的/解析器/ _test追加到sys.path的目錄,以便結果MyPackage的無法找到。在IronPython場景中,MyPackage/parsers/_test目錄和MyPackage /位於sys.path中。如果我從_test目錄中調用測試(我不知道MyPackage),我可能會得到同樣的錯誤參考。即使我將測試文件整合到_test目錄中,我仍然會遇到此路徑問題。

我應該注意,我只是測試,如果我不喜歡的東西

import sys 
import os 
sys.path.append(os.getcwd()) 

這將正確加載。但我必須爲每個文件都做這件事。

有沒有辦法解決這種路徑問題,而無需執行以下操作。在每個文件中追加sys.path的相對路徑。

B.追加PATH包括MyPackage的(我不希望我的包作爲蟒蛇的一部分「全球」系統尋路)

非常感謝任何提示!

回答

1

兩個選項映入腦海:

  • 使用環境變量PYTHONPATH和包括。

  • 它在你的程序

import sys.path 
sys.path.append('.') 
  • 的開頭添加到您的sys.path如果您需要導入相對路徑動態你總是可以做一些像
import somemodule 
import sys 
dirname = os.path.dirname(os.path.abspath(somemodule.__file__)) 
sys.path.append(dirname) 
+0

這絕對有效。這種做法違反了我的限制條件A.(我必須爲每個文件都這樣做)。但是這是一種標準做法嗎?我無法想象其他人也沒有這個問題......或者他們已經設計好了,所以這不是問題。或者我猜他們在環境中添加了路徑到他們的軟件包PYTHONPATH – Mike

+0

您可以在系統範圍的site.py中添加路徑? – synthesizerpatel