【发布时间】:2017-11-15 02:36:22
【问题描述】:
我写了一个包,位于/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:“从/home/michael/python/src/mcdb_mail_parser 目录运行mcdb-mail-parser.py 脚本?
结束语
接受的答案很有用,他们提供的链接也是如此。这是我最终所做的:
1、我将mcdb_mail_parser的内容从子目录移到了README.md的同一个目录下,从而去除了一层复杂性。
2.我按照建议将导入语句添加到__init__.py。
3、Python报错找不到__main__.py,所以我把mcdb-mail-parser.py改名为__main__.py
【问题讨论】:
-
python -m无论如何都不会在这里工作,因为没有__main__.py。您可以将-m留在外面。
标签: python python-3.x python-2.7