mylibraryした後にmylibrary.__version__で参照出来るように、mylibrary/__init__.pyに記述の2つの記述が必要になります。同じバージョン番号を2箇所に書くのは手間、かつ間違いの元なので、1箇所で済ませたい所です。__version__するという構成は、よくあるパターンだと思います。__version__の罠この構成には問題があります。非標準モジュールのimportを記述した場合です。numpyImportErrorとなり、mylibraryモジュールのインストールが出来なくなります。numpyをインストールするためのinstall_requiresがsetup.pyに記述してあるにも関わらず、そのsetup.pyが実行出来ずにインストール出来ないという、「金庫の中の鍵」状態です。ベストだったプラクティス1原因は__version__.pyをimportすると、同じディレクトリの__init__.pyも一緒にimportされてしまう為です。従って、解決策は「importせずに__version__.pyを読み込む」です。version=__version__,)詳しく解説はしませんが、__version__.pyを探し、evaluateして、変数__version__を直接取り出しています。この方法で、ImportErrorを引き起こす__init__.pyのimportを回避することが出来ます。言え、setup.pyにメタデータ以外のコードを書きすぎるのは抵抗があるし、__init__.pyで非標準モジュールをimportしたらダメというのも現実的ではありません。「__version__はアンチパターン」という意見が出るのも頷けます。ベストプラクティスsetup.pyをこう記述してください。setupsetup()見ての通り、setup()を呼び出すだけで、設定は空っぽです。setup()は中身が空かどうかに関わらず、setup.cfgファイルがあれば、そこから不足している設定を取得します。setup.cfgにはファイルと変数を指定して参照する記述方法があります。mylibrary.__version__.__version__これでsetup()のversionに、ファイルmylibrary/__version__.pyの変数__version__を適用したのと同じ効果があります。ところで、この方法でも、__version__.pyをimportするのと同じ様に、__init__.pyもimportされるのではないか?そしてImportErrorになるのではないか?という気がしますが、setup.cfgに記述した変数の参照は「ベストではないプラクティス」のsetup.pyと同じように、importの仕組みを通さずにファイルを直接eval()するようで、ImportErrorにはなりません。まとめversion以外にもsetup.pyに記述していた大抵の事は、setup.cfgにスマートに記述できます。setup()のメタデータだけでなくflake8やpy.test、nosetestなどの設定も一緒に記述することが出来、ディレクトリを綺麗に保つことにも役立ちます。setup.cfgを置くのだから、最大限活用して行きたいですね。本当はこれを「ベストプラクティス」として今年のAdventCalendarを書くつもりでしたが、直前になって圧倒的に簡単な方法が見つかったので、まるっとボツになりました。悔しいのでそのまま置いておきます。setup.cfgが使えないような超絶古い環境を使っている人は参考にしてください。upLoginユーザーは見つかりませんでした。