没有名为的模块

2024-09-28 01:25:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个这样结构的python项目:(这不是一个真正的项目,只用于测试)

ImportTest
    ImportPersonsTest\
        ImportPerson\
            ImportPerson.py
        RunImportPersonTest.py
    RunImportTests.py

我想让这个测试互相联系。例如: 运行导入测试.py调用中的方法RunImportPersonTest.py文件,和RunImportPersonTest.py文件调用方法导入人员.py你知道吗

RunImportPersonTest:

import os
import sys
sys.path.insert(0, os.getcwd() + "../../../")
from ImportPerson import ImportPerson

运行导入测试

import os
import sys
sys.path.insert(0, os.getcwd() + "../../")
from ImportPersonsTest import RunImportsPersonTest

我跑步就成功了导入人员.py以及RunImportPersonTest.py文件,但当我尝试运行runimportsets时,出现以下错误:

    Traceback (most recent call last):
  File "xxx\LiClipse Workspace\SystemTest\ImportTest\RunImportTests.py", line 4, in <module>
    from ImportPersonsTest import RunImportsPersonTest
  File "xxx\LiClipse Workspace\SystemTest\ImportTest\ImportPersonsTest\RunImportsPersonTest.py", line 4, in <module>
    from ImportPerson import ImportPerson
ImportError: No module named 'ImportPerson'

有什么建议吗?你知道吗

编辑

新结构

ImportTest
        ImportPersonsTest\
            ImportPerson\
                ImportPerson.py
                __init__.py
            RunImportPersonTest.py
            __init__.py
        RunImportTests.py
        __init__.py

Tags: 文件frompyimportinitossys结构
3条回答

有两个基本问题:

  1. os.getcwd()与其他os函数一样返回路径,末尾没有分隔符。实际上,您插入的xxx\LiClipse Workspace\SystemTest\ImportTest../../../不是有效路径

  2. 正如@peter提到的,使用操作系统getcwd()是个坏主意-这取决于您运行脚本时的位置。用途: sys.path.append(os.path.dirname(__file__))insert仅在特殊情况下推荐)

但是

看来这些都没有引起你的问题。它只会在你的sys.path中插入不好的东西。您的导入需要正常工作,因为所有的导入都是从self module dir完成的,python首先在其中搜索请求的模块。你知道吗

我把你的包裹复制到我的机器上-两个都运行得很好! 我修复了一个拼写错误(RunImportsPersonTest RunImportPersonTest)-可能还有其他拼写问题

我认为你使用操作系统getcwd()有缺陷。你知道吗

如果您运行的是我的目录,那么您将无法修复当前目录中的任何导入操作,因此您需要先修复当前目录中的任何导入操作。然后尝试第二次导入时,添加“../ImportTest/../../..”或“../ImportTest/../..”无助于Python找到它。你知道吗

要解决这个问题,可以将ImportPersonsTest目录添加到您的路径中,或者在导入中使用一个经过适当修改的名称(确保您的init文件已经标记)

from ImportPersonsTest.ImportPerson import ImportPerson

看起来您的项目中没有任何__init__.py文件。Python需要这些文件才能从文件夹导入模块。好消息是,它们很容易制造:大多数时候,它们不需要任何东西,它们只需要存在。你知道吗

见:https://docs.python.org/2/tutorial/modules.html#packages

相关问题 更多 >

    热门问题