2015-07-10 60 views
12

我最近想出瞭如何在python中導入單元測試模塊。作爲這個解決方案,我使用:Python在PyCharm中工作,但不是從終端

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))) 
from Dev.test import someclass 

這在PyCharm中運行正常,我得到預期的輸出。然而,當我從終端運行我碰到一個錯誤:

ImportError: No module named Dev.test 

我有初始化文件,他們都應該是,但我迷路了,爲什麼這是工作在PyCharm但不從終奌站。我沒有改變我的路徑或任何PyCharm,因爲這段代碼應該能夠在其他機器上進行最小限度的修改。任何想法,爲什麼會發生這種情況,以及我可以做些什麼來解決這個問題?

我的文件夾結構如下

-Current 
-Dev 
-__init__.py 
-test 
    - __init__.py 
    -someclass.py 
    -Tests 
    -__init__.py 
    -someunittest.py 

我試圖從主文件夾someunittest運行,以及一個完整的路徑,但它只是在PyCharm

工作
+0

是的,但在查看終端後,它使用2.7,與PyCharm相同 – user3591079

+2

什麼是您的文件夾結構?您使用哪些命令在Python和Pycharm中以及從哪個目錄進行測試? – Kupiakos

+0

我添加了我的文件夾結構以進行說明。我確信PyCharm正在使用正確的版本,但可能它是我的路徑,儘管我沒有從默認值改變它。 – user3591079

回答

1
sys.path.append(os.getcwd()[:os.getcwd().index('Dev')]) 

我加入這我的進口和它似乎已經解決了這個問題。但是,這似乎並不是正確的做法;它現在會做。

+0

Hi @ user3591079。我似乎有類似的問題,但似乎無法修復它。當你說「我把這件東西加進我的進口產品中,似乎解決了問題時,你的意思是什麼。」我試着在我的python腳本中這樣做,但它仍然無法工作。謝謝! –

+0

對於我來說,這會導致像'ValueError:substring not found'這樣的錯誤。你能提供任何指導嗎? – alex

2

當在PyCharm中運行腳本時,它將在設置爲項目資源管理器中標記爲「Sources Root」(帶有藍色文件夾圖標)的所有文件夾列表的PYTHONPATH環境中運行。

在PyCharm之外,通常不會設置PYTHONPATHsys.path中的第一項涉及腳本運行的當前工作目錄。只要您使用終端的工作目錄運行腳本作爲包含Dev的文件夾,它應該能夠找到Dev.test模塊,而不管添加到sys.path的額外條目如何。

一旦你的工作目錄正確,你應該能夠刪除sys.path黑客。

+3

但是,這又不是因爲一些奇怪的原因。這在一個項目中適用於我,但不適用於另一個項目。所以似乎還有其他工作。 – Zelphir

1

我也有這個問題 - 並且由PyCharm設置的PYTHONPATH設置似乎是問題。

我的替代方案(因爲我幾乎完成編寫代碼)是生成一個setup.py - 並在我的本地虛擬python環境中安裝類/結構。

希望這會有所幫助..

+0

你能詳細解釋一下嗎? 'setup.py'確實做了什麼? 「在我的本地虛擬python環境中安裝類/結構」是什麼意思? – alex

-1

我有類似的問題。我認爲這個問題是Pycharm運行腳本之前修改PYTHONPATH這樣:其中蟒蛇文件駐留

  • 運行出口PYTHONPATH =

    1. cd到文件中。
    2. 運行腳本

    你也可以創建你設置Python路徑,然後調用其他模塊

  • +0

    這不但對我不起作用,而且對於Windows 7的Git Bash,'echo $ PYTHONPATH'返回''' - 不是實際的路徑。 – alex

    +0

    @alex:也許這將有助於更多:在腳本中導入後輸入以下命令:os.environ [「PYTHONPATH」] =「。」並重新運行它。請讓我知道它是否有效。 – mark

    +0

    @alex是否有效? (在腳本中輸入後立即放入os.environ [「PYTHONPATH」] =「。」) – mark

    0

    我會建議你的源代碼目錄嘗試$ pip install .「主」 Python文件。這會爲你的項目安裝你自己的軟件包。

    +0

    哪個「源碼目錄」? 「pip安裝」究竟做了什麼? – alex

    相關問題