2016-04-26 9 views
0

私はいくつかのモジュールGUI(グラフィカルインターフェイスを説明しています)を作成しています。これには別のモジュールsomecalc(計算しています)が必要です。後者の輸入標準ライブラリ:ossystimeなど他のサブモジュールをインポートして標準ライブラリを無視する

客観最後に、パッケージを構築することです。

私はパッケージおよび/または他の自己開発したモジュール内の他のサブモジュールをインポートに関する規則見つけることができません:(Ipythonにし、自動補完)名前空間を乱雑にすることなく、

  1. を:

    • 私が見たいと思っていませんsomecalc.ossomecalc.syssomecalc.time
  2. すでに私は somecalc.pyimport os as _osを足すことで、問題の#1を固定した場合でも somecalc

    • にインポートされた標準ライブラリを再インポートすることなく
    • は、私は同じことを行うための2つの方法があります。私はGUI内で次のテストを行う場合:

    • somecalc.os is os #TRUEsomecalc.pyimport os付き)
    • somecalc._os is os #TRUE標準ライブラリに面倒な呼び出しなし
  3. somecalc.pyimport os as _osとIPythonからノー自動補完)、例えばsomecalc.os.listdirと書くと、os.listdirと書くことができます。他にも、他の開発者が私と一緒にプロジェクトに取り組むかどうかは分かりません。

私はかつて私は、私はすべての私の輸入品との__init__.pyファイルを追加することをお勧めしていますパッケージに私のフォルダを有効にすることを知っています。しかし、サブモジュールを開発/デバッグするときに(if __name__ = '__main__'のコードを使用)、ルートディレクトリの__init__.pyファイルは無視されます。私はまだGUI.pyファイルの先頭にimport somecalcと書く必要があります。

慣例は何ですか?

答えて

1

__init__.pyには、公開する必要があるものだけが公開されています。標準ライブラリを必要とするその他の.pyを作成し、必要なものをインポートします。

$ tree GUI/ 
GUI 
├── __init__.py 
└── somecalc 
    ├── __init__.py 
    ├── somecalc.py 

$ cat GUI/__init__.py 
import somecalc 

$ cat GUI/somecalc/__init__.py 
from somecalc import get_time 

$ cat GUI/somecalc/somecalc 
import os 
import sys 
import time 

def get_time(): 
    return time.time() 

こうすることで、あなたはsomecalcをインポートするとき、あなただけget_timesomecalcサブモジュールを参照してください。

$ python 
Python 2.7.9 (default, May 20 2015, 15:38:28) 
[GCC 4.7.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import GUI 
>>> dir(GUI) 
[..., 'somecalc'] 
>>> dir(GUI.somecalc) 
[..., 'get_time', 'somecalc'] 
>>> dir(GUI.somecalc.somecalc) 
[..., 'get_time', 'os', 'sys', 'time'] 
>>> 
+0

あなたの解決策は、私はGUIからの標準ライブラリにアクセスすることができ、またはそれ以上の面倒ではありませんがway:今、somecalc.os.listdirはsomecalc.somecalc.os.listdirになりました。 – Wli

+0

'import sys'を使って標準のlibrairiesにアクセスしますか?何が問題ですか ? – Cyrbil

+0

私は、これがコンベンションに求めている理由はわかりません。 モジュール "x"がすでにサブモジュール "sm"にインポートされていても、 "sm"をインポートしているすべてのモジュールで毎回 "x"をインポートする必要があります。 ダウンロードしたモジュールの下に標準ライブラリが見つかりませんでしたので、これは奇妙なものです。 – Wli

関連する問題