【问题标题】:python -m cannot find my modulespython -m 找不到我的模块
【发布时间】: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.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:“从/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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多