2016-04-24 57 views
1

我有一個包有以下層次不知道我是否應該使用相對導入或添加父目錄到sys.path中

my_package/__init__.py 
      script_a.py 
      scripts_dir/__init__.py 
         script_b.py 
      my_package/__init__.py 
         module_a.py 
         module_b.py 

module_a和module_b包含我正在使用script_a和script_b函數和類定義(這是獨立的腳本,幷包含一個主)

當我從我們的script_a.py中導入module_a.py的東西時,一切都很好。

我的問題

  • 我無法弄清楚如何使用相對導入從module_a或module_b導入東西script_b.py
  • 我不知道我是否應該使用相對進口或如果它更有意義添加my_package到sys.path中,然後使用類似 from my_package.module_a import the_funky_func

  • 我想避免調用解釋與-m參數

更新

從答案我已經找到了SO到目前爲止,我的結論是,我有3個選項

  • 寫一個安裝的包包括我的PYTHONPATH使所有腳本無論在哪裏都可以調用模塊

  • 使用-m參數調用解釋

  • 做一些黑客的sys.path

有沒有我不知道的另一種選擇?

+0

最後一部分,你可以檢查我的解決方案是: [如何使用的相對導入,而無需做邊-蟒米](http://stackoverflow.com/questions/35855800/how-to-use-relative-import-without-doing-python-m) – Copperfield

回答

0
myproject/ 
     |--package1 
       |--\__init__.py 
       |--script_a.py 
       |--script_b.py 
     |--package2 
       |--module_a.py 
       |--module_b.py 

您可以使用下面的2行追加myproject sys路徑的路徑。它可避免相對進口和避免-m在命令行

import sys 
import sys.path.append("/absolute/path/to/your/myproject") 

myproject文件script_a.py,如果導入module_a.py它看起來像

import sys 
import sys.path.append("/absolute/path/to/your/myproject") 
import package2.module_a as ma 
+0

你會推薦通過添加包路徑到PYTHONPATH嗎? – LetsPlayYahtzee

+0

是的。範圍是項目本身,而不是整個系統 – haifzhan

相關問題