2017-06-12 60 views
0

這是我的代碼的結構:無法從不同的文件夾導入模塊-python

---root-dir/ 
     ----app/ 
      -----config/ 
        ------ __init__.py 
        ------ config.py 
      -----constants/ 
        ------ __init__.py 
        ------ ****.py 
        ------ ****.py 
      -----exception/ 
        ------ __init__.py 
      -----main/ 
        ------ __init__.py 
        ------ controller.py 
      -----util/ 
        ------ __init__.py 
        ------ picklehelp.py 

現在,當我做/main/controller.py下面的導入和運行,這是行不通的。

from app.util.picklehelp import func 

如何導入模塊,無需做代碼最大的變化,以便它可以在任何一臺機器的工作路徑位置和操作系統無關

+1

你的'app'目錄是否有'__init __。py'? –

+0

是的。 'app'目錄有一個'__init__.py' –

+1

你有什麼錯誤嗎?如果是,請發佈你的堆棧跟蹤 – DarkCygnus

回答

0

答案將被添加到sys.path路徑您的應用程序(不包括文件名):

import sys 
sys.path.append(r"root-dir\app\util") 

from picklehelp import func 

How can I import the modules, without doing maximum changes in code so that it can work in any machine* irrespective of the path location and OS

sys模塊工作在Python支持任何操作系統。然後,可以有其他模塊獨立於OS,如Windows操作系統中的winsoundwinregwindows

*沒有任何機器都可以運行Python

+0

的主python程序,在這種情況下,我們需要在'os.path.append(r「root-dir \ app \ util 「)',它可以與其他用戶有所不同。我正在尋找一種解決方案,任何用戶都可以選擇我的代碼並運行,而無需進行任何路徑更改 –

+0

糟糕,我已將'os',實際模塊看起來是'sys'。 'os.path'是一個處理路徑的模塊,比如'pathlib'。 –

+0

我認爲這是'sys.path.append' –

0

目錄更改爲根目錄。運行python -m app.main.controller

這會將您的應用作爲模塊運行。

+0

這確實有用,但我看到響應時間有很大差異。當我通過模擬50個線程從pycharm運行時,它需要80-90毫秒的平均值,但是以'python -m app.main.controller'運行需要大約800-900毫秒。我不明白爲什麼性能下降。 –

+0

每個'。'帶來滯後。 –

+0

有沒有一種方法來保持性能? –