我写了一个包,它位于/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.py
从mcdb_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
答案 0 :(得分:1)
列出子目录中__init__.py
中的模块,然后Import
中的mcdb-mail-parser.py
引用该目录
与之前的StackOverflow Post非常相似 - > Loading all modules in a folder in Python