ModuleNotFoundError-脚本和REPL之间的行为不同

时间:2019-02-16 17:45:17

标签: python python-3.x

我做了一些谷歌搜索和SO搜索,似乎无法找到一种方法(除了修改PATH或PYTHONPATH之外),以脚本形式运行应用程序时避免了<?php if ($data['results']){ $i=1; foreach ($data['results'] as $row) { ?> <tr> {{$row->query_feedback_type}} <td><center><?php echo $row->name; ?></center></td> <td><center><?php echo $row->queryFeedbackType->id ?> //getting error in this line 。但是,通过REPL运行时,一切似乎都正常。有没有很好的方法做到这一点,还是我只需要接受我的应用程序的PYTHONPATH需要预定义的事实?如果修改PYTHONPATH是最好的方法,那么在下面的示例应用程序中应在哪里设置呢?

并且要澄清的是,这不是一个“破产,帮助解决问题”的问题,而是一个“如何最好地解决此问题”的问题。

一个示例应用程序:

ModuleNotFoundError

在REPL中一切正常(无需修改PATH或PYTHONPATH)

.
└── mnf_app
    ├── __init__.py
    ├── dir1
    │   ├── __init__.py
    │   └── mod1.py
    └── dir2
        ├── __init__.py
        └── mod2.py

# mnf_app/dir1/mod1.py
from mnf_app.dir2 import mod2

print('hello from', __file__)

# mnf_app/dir2/mod2.py
print('hello from', __file__)

尝试作为脚本运行时出现ModuleNotFoundError失败

$ python
>>> import mnf_app.dir1.mod1
hello from /private/tmp/mnf-app/mnf_app/dir2/mod2.py
hello from /private/tmp/mnf-app/mnf_app/dir1/mod1.py

在修改PYTHONPATH时工作正常

$ python mnf_app/dir1/mod1.py
Traceback (most recent call last):
  File "mnf_app/dir1/mod1.py", line 1, in <module>
    from mnf_app.dir2 import mod2
ModuleNotFoundError: No module named 'mnf_app'

0 个答案:

没有答案