私は完全に次のような構造を持つディレクトリに含まれるPythonプログラムがあります。他の開発者がpip install -e /path/to/git/clone/of/myprog
を行うことができ、その後、MYPROGをインポートできるように、私はこれをパッケージ化し、それを配布できるようにしたいと思いますPython:モジュールとパッケージング - なぜ__init__.pyファイルが__main__.pyより先に実行されないのですか?
myprog/
├── __init__.py
├── __main__.py
├── moduleone.py
└── moduletwo.py
を彼自身のプログラムでは、それをクールなものをする。
また、私は次のようにコマンドラインでMYPROGを実行できるようにしたい:私はこれを行うと
PROMPT> python myprog
は、私はPythonはそれがない__main__.py
モジュールを実行することを期待。しかし、このモジュールは、__init__.py
で宣言され、プログラムがコマンドラインで実行されているときと別のプログラムによってインポートされたときの両方で利用可能でなければならない関数を参照します。しかし、私は次のエラーを取得しています:
NameError: name 'function_you_referenced_from_init_file' is not defined
私は何とか__main__.py
にこれらの関数をインポートする必要がありますか?
次のように私は簡単な例を試してみました:
PROMPT> cat myprog/__init__.py
def init_myprog():
print 'running __init__.init_myprog()'
PROMPT> cat myprog/__main__.py
import myprog
print 'hi from __main__.py'
myprog.init_myprog()
PROMPT> ls -l myprog
total 16
-rw-r--r-- 1 iit 63B Aug 30 11:40 __init__.py
-rw-r--r-- 1 iit 64B Aug 30 12:11 __main__.py
PROMPT> python myprog
Traceback (most recent call last):
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 162, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/local/Cellar/python/2.7.5/Frameworks/Python.framework/Versions/2.7/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/Users/jon/dev/myprog/__main__.py", line 1, in <module>
import myprog
ImportError: No module named myprog
質問を閉じることに投票している人は誰でも - それがばかばかしくてシンプルなら、数秒で私に説明できるかもしれませんか?私はこのリンクhttp://stackoverflow.com/questions/3411293/using-modules-own-objects-in-main-pyから学ぶことを試みたが、まだ問題を抱えている。 – jononomo
組み込み関数を除くすべてをインポートする必要があるので、答えはかなり明白な "はい"です。 –