相关疑难解决方法(0)

Python:模块和打包 - 为什么在__main__.py之前没有执行__init__.py文件?

我有一个完全包含在具有以下结构的目录中的python程序:

myprog/
??? __init__.py
??? __main__.py
??? moduleone.py
??? moduletwo.py
Run Code Online (Sandbox Code Playgroud)

我希望能够打包并分发它,以便其他开发人员可以做pip install -e /path/to/git/clone/of/myprog,然后可以在他自己的程序中导入myprog并用它做很酷的事情.

我还希望能够在命令行运行myprog,如下所示:

PROMPT> python myprog
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我希望python能够执行__main__.py它所执行的模块.但是,此模块引用了一些声明的函数,这些函数__init__.py在程序在命令行运行时以及由另一个程序导入时都需要可用.但是,我收到以下错误:

NameError: name 'function_you_referenced_from_init_file' is not defined
Run Code Online (Sandbox Code Playgroud)

我必须以__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 …
Run Code Online (Sandbox Code Playgroud)

python module python-module

11
推荐指数
2
解决办法
6843
查看次数

标签 统计

module ×1

python ×1

python-module ×1