【发布时间】:2013-09-03 09:26:04
【问题描述】:
我有一个完全包含在具有以下结构的目录中的 python 程序:
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
【问题讨论】:
-
致投票结束这个问题的人——如果它是如此愚蠢和简单,也许你可以在几秒钟内向我解释一下?我试图从这个链接中学习stackoverflow.com/questions/3411293/…,但仍然遇到问题。
-
您必须导入除内置函数之外的所有内容,因此答案是非常明显的“是”。
标签: python module python-module