2017-12-08 13 views
0

私は最新のpythonバージョン(2 & 3)でいくつかの問題を抱えています。私はは、PyPIにプッシュパッケージについてpython 2.7.14&3.6パッケージのインポートのための良い練習

私は輸入品のため__init__.pypackage.moduleを使用し、その後、パッケージ用のサブフォルダを作成すると、それはまだ大丈夫です。 私は同じことをモジュールファイルで行います。

これ以外にも、プロジェクト間で共有するいくつかのパッケージ(私のsvnサーバに保存されています)を持っています。これをプロジェクトのsvn外部としてインポートします。

階層は、通常はこのように設計されています

package: 
|- __init__.py 
|- module1.py 
|- module2.py 
|- ... 

私はプロジェクトにインポートすると、フォルダは次のようになります。

project: 
|- package: 
    |- what's above 
|- app.py 

私は通常、プロジェクトとしてパッケージ自体の開発、packageを意味しますルートです。 私はそれをプロジェクトにインポートすると、パッケージになります。ルートにはなりません。

スタンドアロンパッケージプロジェクトでpackage.moduleまたは.moduleを使用すると、もちろん動作しません。 他のプロジェクトと同じパッケージを使用している場合、これはほとんどうまくいく傾向にありますが、Python 3.6ではいくつかの名前が定義されていないという問題があります(コマンドラインから直接起動したときpycharmの下で動作したとき)。 py2exeを使用してPython 2.7から実行可能ファイルを作成するときに、そのような例外が発生していないため、インポートが正常であると思われる場合でも、いくつかの未定義の名前(クラスなど)が取得されます。私は関連する.pycファイルがlibrary.zipにあることが分かりました。

私はこれらの問題を数か月前にやっていませんでしたが、Python 2もPython 3も古いバージョンではありませんでした。

StackOverflow、pythonのドキュメント(2 & 3)を検索して、これらの最後の日に多くのことを検索しながら、全体の問題に本当に関連するものを見つけずにこの質問を開きます。

私の質問です、誰のpython 2 & 3との間に互換性があるでしょう輸入のために良い習慣上の任意の手掛かりを持っていますし、パッケージが__main__のときにも働くだろうか?そして、ボーナスは、py2exeで詰められてもまだ大丈夫ですか?

ある時点で、私はこれらのインポートのためにいくつかのtry/except ImportErrorブロックを試しましたが、ビットを上げてしまいます&は信頼できないようです。

ありがとうございました!

答えて

0

から__package__に関するいくつかの手がかりを考える:

Relative imports for the billionth time

私は、インポートする前にチェックするために、いくつかのより一貫性のある解決策を見つけました。あなたは、ファイル自体から直接実行する場合には

if __package__ is None or __package__ == '': 
    from module1 import * 
    from module2 import * 
else: 
    from .module1 import * 
    from .module2 import * 

(のはmodule1を言わせて)、__package__はNoneです。__package__ == ''のチェックを追加する必要がありました。module1module2をインポートした場合、パッケージはmodule2Noneではありません。

この場合、実際には推奨されていなくても相対インポートを使用することをお勧めします。パッケージとして使用する場合、パッケージ自体は何も変更せずに任意の名前を持つことができます。メインアプリからパッケージとしてインポートする場合にのみ、それが使用されるように

について__init__.pyファイル、私は相対的な輸入品を使用します。

import package 
from package import xxx 

をこれは、Python 2.7の両方の輸入についても、物事を解決しているようです。 14 & 3.6ですが、まだpy2exe(2.7)で問題が発生し、全体のpojectは生成されません。

関連する問題