Cannot find module when importing from project in python
我的目录结构如下:
我在util/misc.py中有一些实用功能,我想在compose_dataset.py中导入。但是,我无法使import语句工作。
我正在开发Windows python3.5.4,所以根据我所读的内容,我不再需要__init__.py文件了。项目文件夹是我的PYTHONPATH的一个子文件夹,它只指向e:python。到目前为止,我尝试了:
1 2 3 4
| from misc import *
from util import *
from util.misc import *
from ..util.misc import * |
或者接收到ImportError: No module named 'xyz'或者ImportError: attempted relative import with no known parent package。我还尝试添加init文件,但是我没有这些经验,只是在每个目录中添加了一个init文件,但是(令人惊讶)也不起作用。
我这里缺什么??
- 您需要将src文件夹放在您的工作目录中的PYTHONPATH上,否则from src.util.misc import *会起作用。
- 你有没有尝试过util文件夹中的__init__.py?
- PYTHONPATH现在是"e:python",e:pythonprojectsrc",我仍然得到No module named 'src'。此外,将每个项目文件夹的SRC文件夹添加到路径变量真的是一个很好的长期解决方案吗?
- @bhnn如果将src添加到PYTHONPATH中,则不需要将其包括在导入中:from util.misc import *
- @彼得伍德,我试过了,但没用。如果我只是把src添加到PYTHONPATH中,那么我的sys.path变量在运行时包含/src和/src/data,而不是/src/util。这就是造成问题的原因。如果我像下面评论的那样手动添加它,它会很好地工作,但是过梁仍然会显示一个错误,因为更正显然只在运行时发生。你知道什么会导致这种奇怪的行为吗?
- sys.path不应该包含/src/util,应该包含/src,那么你说from util import misc或者类似的东西。
- 但当sys.path只包含/src时,只有当/src/util手动添加到路径中时,导入语句才起作用。你所说的是大多数信息源都说的是正确的方式,所以sys.path肯定有问题,使其故障正确?
试试这个:
1 2 3
| import sys
sys.path.insert(0, '../')
from util.misc import * |
您可能还想看看本文:如何从python中的文件文件夹外部访问模块?
- PYTHONPATH现在包含'../',路径,但是import语句仍然不识别util。
- 您是否将__init__.py添加到子文件夹中?通过这种方式,python将文件夹视为模块。一个空的__init__.py就可以了。
- 是的,现在根目录和每个子目录中都有一个init文件。仍然是相同的importerror。
- 你能像我在回答中提供的链接那样,用sys.path.append代替insert吗?
- 嗯,看来由于某种原因,/src和/src/data自动包含在PYTHONPATH中,只是从把到/src的绝对路径放入其中。不过,它缺少与/src/util的链接。使用sys.path.append(os.path.abspath(os.path.join('./src', 'util')))修复。奇怪的是,它会自动识别另一个子文件夹,而不是这一个子文件夹…
将您的PYTHONPATH设置为.,并将__init__.py文件添加到每个目录中,在您的情况下,将它添加到src、data和util目录中。假设您从项目的根目录(与您的README.md文件所在的目录相同)运行"入口点"脚本来导入,请使用以下代码:
1 2
| # compose_dataset.py file
from src.util.misc import function_name |