Python 3 -- 模块未找到

8
我有以下文件结构...
 > Boo
    > ---modA
    > ------__init__.py
    > ------fileAA.py
    > ---modB
    > ------__init__.py
    > ------fileBB.py

在fileBB.py文件中,当我执行以下操作时:
from modA.fileAA import <something>

我得到了以下错误:
from modA.fileAA import <something>
ModuleNotFoundError: No module named 'modA'

请注意,__init__.py 文件为空,并且使用的是 Python 3。
我在这里错过了什么或者做错了什么?

Python脚本在哪里?如果您直接运行python3 fileBB.py,它不会查找模块。 - Duncan
1
__init__.py 放在 Boo 中? - minhhn2910
1
从Boo目录中运行它。 - A Magoon
1
在这种情况下,我之前使用过 sys.path.append('../') 并且过去它曾经起作用。 - andrew
尝试在Boo中添加__init__.py,但是出现了相同的错误。 - DimSarak
4个回答

1
这几乎可以确定是一个 PYTHONPATH 问题,与您运行脚本的位置有关。通常情况下,以下方法可行:
$ ls modA/
fileAA.py  __init__.py
$ cat modA/fileAA.py 
x = 1
$ python3
Python 3.5.3 (default, Jan 19 2017, 14:11:04) 
[GCC 6.3.0 20170118] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from modA.fileAA import x
>>> x
1

您可以查看 sys.path 来检查您的路径。

1
main_package
├── __init__.py
├── modA
│   ├── fileAA.py
│   └── __init__.py
└── modB
    ├── fileBB.py
    └── __init__.py

在根目录下有一个__init__.py文件,然后使用import命令即可,例如:

from main_package.modA.fileAA import something

使用 main_package 内的 driver 文件运行,然后运行即可。


1
使用 sys.path.append 对我有用。我检查了能够正确导入包的版本的路径,并将这些路径添加到出现导入错误的内核中。 我遇到了两个包的问题,一个在anaconda上工作,另一个在Python3.7上工作。将Python3.7的路径添加到anaconda内核(Python 3)中解决了这个问题。
import sys
sys.path.append('...\AppData\\Roaming\\Python\\Python37\\site-packages\\win32')

-1

由于您已经在 fileBB.py 中编写了代码,并尝试导入在 fileAA.py 中定义的变量/函数/类等,您实际上需要像这样执行:

  • 首先在Boo里创建一个空的__init__.py文件。

  • 然后尝试这样导入:

    from ..modA.fileAA import <something>
    
根据我编写软件包的经验,它应该可以正常工作。
请注意:如果出现问题,请留言,我会提供帮助,但这不应该发生。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接