python -m找不到我的模块

时间:2017-11-15 02:36:22

标签: python python-3.x python-2.7

我写了一个包,它位于/home/michael/python/mcdb-mail-parser/

其中的文件结构是:

 .
 ├── __init__.py
 ├── mcdb_mail_parser
 │   ├── __init__.py
 │   ├── MCDBAttachment.py
 │   ├── MCDBEmail.py
 │   ├── Options.py
 ├── mcdb-mail-parser.conf.sample
 ├── mcdb-mail-parser.py
 ├── README.md

mcdb-mail-parser.pymcdb_mail_parser子目录导入。

如果我从源目录(/home/michael/python/src/mcdb_mail_parser)运行脚本,它工作正常,因为mcdb_mail_parser目录在当前目录中立即可用。但是,我需要从另一个用户的主目录运行它(通过cronjob,或通过子进程从另一个脚本),python抱怨它找不到模块:

我尝试用python3 -m /home/michael/python/src/mcdb_mail_parser执行它,但它抱怨:

michael@d8:~$ python3 -m /home/michael/python/mcdb-mail-parser/
/usr/bin/python3: No module named /home/michael/python/mcdb-mail-parser/

我不知道从哪里开始。我认为这是一个路径问题。我可以将/home/michael/python/src/mcdb_mail_parser添加到系统路径,或者可能是python路径,但这似乎是错误的解决方案。我当然不想将路径硬编码到任何脚本中。

如何告诉python:"从mcdb-mail-parser.py目录运行/home/michael/python/src/mcdb_mail_parser脚本?

结束笔记 接受的答案很有用,他们提供的链接也很有用。这是我最终做的事情:  1.我将mcdb_mail_parser的内容从子目录移动到与README.md相同的目录中,从而消除了一个级别的复杂性。  2.我按照建议将导入语句添加到__init__.py。  3. Python抱怨它无法找到__main__.py,所以我将mcdb-mail-parser.py重命名为__main__.py

1 个答案:

答案 0 :(得分:1)

列出子目录中__init__.py中的模块,然后Import中的mcdb-mail-parser.py引用该目录

与之前的StackOverflow Post非常相似 - > Loading all modules in a folder in Python