【发布时间】:2020-07-29 22:14:34
【问题描述】:
我正在 Python 3.8.2 上开发一个 Python 库,我想将一个模块作为主模块运行以进行测试。当我尝试时,我收到 ModuleNotFound 错误。
这是我的库结构:
.
├── foo
│ ├── __init__.py
│ ├── bar.py
│ └── quux
│ ├── __init__.py
│ ├── corge.py
│ └── garply.py
├── main.py
bary.py:
def baz():
print("baz")
corge.py
from foo.quux.garply import *
def grault():
waldo()
print("grault")
if __name__ == '__main__':
grault()
garply.py
def waldo():
print("waldo")
main.py
from foo.bar import *
from foo.quux.corge import *
if __name__ == '__main__':
baz()
grault()
(所有__init__.py文件都是空的)
当我运行main.py 时,它可以工作。
$ python main.py
baz
waldo
grault
如果我尝试运行corge.py,我会收到以下错误:
$ python foo/quux/corge.py
Traceback (most recent call last):
File "foo/quux/corge.py", line 1, in <module>
from foo.quux.garply import *
ModuleNotFoundError: No module named 'foo'
不管我当前的工作目录是什么,它总是给出这个错误。
$ cd foo/quux/
$ python corge.py
Traceback (most recent call last):
File "corge.py", line 1, in <module>
from foo.quux.garply import *
ModuleNotFoundError: No module named 'foo'
在测试这个时,我使用 PyCharm 2020.1 创建了一个新的 PyCharm 项目,并实现了我描述的结构。令我惊讶的是,它适用于默认检测到的运行配置。
我尝试使用 PyCharm 自动创建的 venv,但仍然无法正常工作。如果我直接复制/粘贴命令并使用他们的 CWD,它将不起作用。它不适用于 PyCharm 中内置的终端。它仅适用于 PyCharm 运行按钮。
我的模块结构有问题吗?如果是这样,PyCharm 可以做些什么来完成这项工作?如果不是,为什么它不能在 PyCharm 之外工作?
【问题讨论】:
标签: python python-3.x pycharm python-module