2016-10-24 2 views
5

場合によっては、アプリケーションとサードパーティ製パッケージ内の内部ファイルとの間でモジュール名の衝突が発生することがあります。たとえば、現在のフォルダ内にprofile.pyという名前のファイルがあると、profile.pyではなく、インポートしようとすると、jupyter notebookがクラッシュする可能性があります。パッケージユーザーの観点から、この問題を回避するにはどうすればよいでしょうか? (またはパッケージの開発者が何とか防ぐ必要があり、この何かある?)モジュール名の衝突の処理

注:同様の問題が発生している間によるアプリケーションと組み込みの名前(例えば、time.pyまたはsocket.py)、少なくともそれが比較的簡単だとの衝突に標準ライブラリモジュールとその他の組み込みオブジェクトの名前を覚えておいてください。

答えて

2

現在のディレクトリは、アプリケーションのメインスクリプトを含むディレクトリです。このディレクトリで名前の衝突を避けたい場合は、モジュールを入れないでください。

代わりに、名前空間を使用してください。メインスクリプトのディレクトリに一意の名前のパッケージを作成し、そこからすべてをインポートします。メインスクリプトは非常に簡単なものであり、これ以上は何も含まれていないはずです:

if __name__ == '__main__': 

    from mypackage import myapp 

    myapp.run() 

パッケージ内のすべてのモジュールはまた、パッケージ内の他のモジュールにアクセスするためにfrom輸入を使用する必要があります。たとえば、myapp.pyには、以下が含まれます。

from mypackage import profile 
関連する問題