2016-06-30 7 views
2

私の質問をより簡単にフレーズできないことをお詫びします。私はほとんどすべての機能でパンダを幅広く使用する大きなパッケージを書いています。私の最初の本能は、当然、__init__.py 名前空間に追加されていないモジュールで外部パッケージを一度インポートする

として
import pandas 
# then import my own submodules and other things 

を作成し、私は機能でパンダを使用するたびに、from . import pandas as pdまたはfrom .. import pandas、またはそのようなこととして、サブモジュールから呼び出すことでした。

しかし、これを行うと、パッケージを読み込むと、パンダは「サブモジュール」として表示されます。つまり、mypackage.pandasがあります。誰にも害を与えないが、私は正しいとは思わない。これを回避する方法は、__init__.pyの末尾にdel pandasを追加することです。これも正しいアプローチのようには見えません。

だから、今から私は私の__init__でパンダをインポートしないと、すべての-function-内別にそれをインポートし、正常に動作しますが、あまりにも反復され、グローバルなパンダの設定を設定してから私を防止します。

ここではどのようなアプローチが適していますか?私は行方不明の方法はありますか?

ありがとうございます。 importによって

+0

なぜ「from」のようなことをする必要がありますか?サブモジュールでpdfとして輸入パンダ? 'pdfとして輸入パンダだけで何が問題なの? – Aya

+0

@Ayaまあ、それは私がやっていることです。しかし '__init __。py'コールからパンダをインポートすることで、そこにいくつかのパンダオプション(' pandas.options.display.expand_frame_repr'など)を定義することができ、モジュール全体で有効になります。さらに、「スクラッチ」から同じパッケージを再インポートすると時間がかかるようですが、それが正しいかどうかはわかりません。 – TomCho

答えて

2

...私はそこにいくつかのpandas "オプションを定義することができます(pandas.options.display.expand_frame_reprのように)、それはモジュール全体で有効になります__init__.pyコールからpandasをする。

とにかくでしょう。このモジュールは初めてimport pandasに電話するときにのみロードされます。その時点で、モジュールへの参照はsys.modulesでアクセス可能なモジュール辞書に格納されます。他のモジュールのimport pandasへのその後の呼び出しでは、sys.modulesの同じ参照が再利用されるため、変更したオプションも適用されます。

さらに、同じパッケージを最初から再インポートすると時間がかかるようですが、それが正しいかどうかはわかりません。

相対パスを解決する必要がないため、実際にはほんのわずかです。モジュールがロードされると、その後の呼び出しは次のように動作します。

import pandas   # pandas = sys.modules['pandas'] 
import pandas as pd # pd = sys.modules['pandas'] 
+0

非常に良い。それは知らなかった。要するに、私がすでにやっていること(それぞれの機能で独立してパンダと呼んでいる)は進歩する良い方法ですよね? – TomCho

+0

@TomChoすべての*関数*またはすべての*サブモジュール*でインポートするかどうかは不明です。 – Aya

+0

私はすべての*関数*でそれをやっています。私はそれ以外の場合、パンダは「サブモジュール」として表示されます。だから私は 'mypackage.submodule.pandas'を避けようとしています。 – TomCho

関連する問題