我有一個完全包含在目錄結構如下python程序:Python:模塊和包裝 - 爲什麼__main__.py之前沒有執行__init__.py文件?
myprog/
├── __init__.py
├── __main__.py
├── moduleone.py
└── moduletwo.py
我希望能夠打包這和分發,以便其他開發人員可以做pip install -e /path/to/git/clone/of/myprog
,然後可以導入MYPROG在他自己的程序中,用它做很酷的事情。
我也想能夠在命令行中運行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
您必須導入除builtins以外的所有內容,所以答案是非常明顯的「是」。 –