2017-09-01 6 views
1

これはPython3では合法です。python2のサブサブモジュールで関数を呼び出す

import keras 
keras.preprocessing.sequence.pad_sequences(...) 

しかし、これをPython2で動作させるには、これを変更する必要があります。

from keras.preprocessing import sequence 
sequence.pad_sequences(...) 

Kerasに問題がありますか、これはPython3の新機能ですか?

この質問は私の知る限りでは知りませんでした。申し訳ありませんが、これは愚かな質問ですが、私はこれを検索するために使用すべきキーワードを本当に知りません...

+0

preprocessingが含まれていない定義されていません。 Kerasを使用します。 Python 2では、最初の例は期待通りに機能し、ソースではKerasは '__all__'を定義しませんが明示的にサブモジュールを明示的にインポートします。これはリンクされた@ZachGatesのドキュメントに概要があります。どのバージョンのケラスを使用していますか(私は2.0.8上にあります) - おそらく古いバージョンは '__init__'で明示的なインポートをしませんか? – Gavin

+0

私は2.0.2を使っていましたが、 '__init __。py'はそれ以来変更されていないようです。 [Here](https://github.com/fchollet/keras/blame/master/keras/__init__.py#L10) –

+0

仮想環境を使用していますか?また作業ディレクトリにkerasというフォルダがありますか? – Gavin

答えて

0

これはモジュールに依存するものです。サブモジュールの名前がモジュール__init__.py__all__に含まれている場合は、期待通りの方法でアクセスすることができます。あなたはどのように__all__が私の答えhereで動作するかを見ることができます。またはthe documentation on packagesをお読みください。

import文は次の規則を使用しています:パッケージの__init__.pyコードが__all__名前付きリストを定義している場合、from package import *に遭遇したときにインポートする必要があり、モジュール名のリストであると解釈されます。パッケージの新しいバージョンがリリースされたときにこのリストを最新の状態に保つことは、パッケージ作成者の責任です。パッケージの作成者は、パッケージから*をインポートするための使用が見られない場合、そのパッケージをサポートしないこともできます。 kerasの場合

、それはどちらか、そのモジュールの__init__.pyようだ:

  • __all__
  • これは時に私の経験ではありません__all__
+0

しかし、これは2と3でなぜ違うのですか? –

関連する問題