【问题标题】:How to import a module from different directory with Python 3?如何使用 Python 3 从不同目录导入模块?
【发布时间】:2017-12-24 15:03:16
【问题描述】:

我尝试导入一个模块进行测试,但收到此错误:

Traceback(最近一次调用最后一次): 文件“BaseTest.py”,第 8 行,在 从 .main.pageobjects.FBPage 导入 * ModuleNotFoundError:没有名为“ma​​in.main”的模块; 'ma​​in' 不是包

项目树如下所示:

/- ProjectDir
/- .src
/- .src.main
/- .src.main.core
/- .src.main.core.BaseCode <- base code to be extended as parent
/- .src.main.core.pageobjects
/- .src.main.core.pageobjects.Module <- a module that inherit from BaseCode 
/- .src.tests
/- .src.tests.BaseTest <- main testing module
/- .src.tests.results

我基本上是在我的 BaseTest 模块中完成的:

from .main.pageobjects.Module import *

我在这里做错了什么? :)

【问题讨论】:

  • 能否请您发布所有其他导入工作的内容?
  • 你用的是什么版本的 Python?
  • Python 3.6.1 import os, import sys, import unittest, from selenium import webdriver, from .main.pageobjects.Module import *

标签: python


【解决方案1】:

您必须在 /- .src.main.core.pageobjects 中创建一个名为:__init__.py 的文件。然后在 BaseTest.py 中添加:

import sys
import os
os.chdir('../main/core/pageobjects')
current_dir = os.getcwd()
sys.path.append(current_dir)
from Module import *
do_something

上面的代码将此路径 (/- .src.main.core.pageobjects) 添加到 PYTHONPATH 环境变量中。 Python 使用 PYTHONPATH 变量来搜索导入的模块,因此添加完整路径后,您可以在任何地方访问Module

【讨论】:

  • init.py 文件中应该包含一些内容吗?
  • @SysMurff 不,应该是一个空文件
  • 刚刚在包含模块的所有目录中添加了 init.py 文件,但结果仍然相同且 not 相同的错误:Traceback (most recent call last): File "BaseTest.py", line 8, in &lt;module&gt; from ..core.pageobjects.Module import * ValueError: attempted relative import beyond top-level package跨度>
  • 请让我看看错误信息
  • Traceback (most recent call last): File "BaseTest.py", line 8, in &lt;module&gt; from ..core.pageobjects.Module import * ValueError: attempted relative import beyond top-level package
【解决方案2】:

您必须在模块下导入特定的类(或多个类)。看下面的代码sn-p。代码下面的逻辑我已经解释过了。

from src.main.core.pageobjects.Module.module1 import Module1
from src.main.core.pageobjects.Module.module2 import Module2

在模块内部,我创建了两个 python 文件:模块 1 和模块 2;在module1中,我创建了一个类——Module1;在module2中,我创建了一个类——Module 2;然后我用下面的代码sn-p来导入包中的两个类

src.tests.BaseTest

点击项目结构截图的链接。 How to import a module from different directory with Python 3? 请参阅 BaseTest 模块下的 module1、module2 和 logintest 的 python 代码。

module1.py

类Module1(对象): def 初始化(自我): print('这是一个模块 1 示例')

def print_info(self):
    print("this is module 1 print statement")

module2.py

类Module2(对象): def 初始化(自我): print('这是一个模块 2 示例')

def print_info(self):
    print("this is module 2 print statement")

src.tests.BaseTest 模块下的logintest.py

    from src.main.core.pageobjects.Module.module1 import Module1
from src.main.core.pageobjects.Module.module2 import Module2

m1=Module1()
m2=Module2()
m1.print_info()
m2.print_info()

运行 logintest.py 并查看结果。结果来自 src.main.core.pageobjects.Module 包中的 module1 和 module2。

C:\Python36\python.exe C:/Users/SeleniumMaster/PycharmProjects/ProjectDir/src/tests/BaseTest/logintest.py
This is a module 1 example
This is a module 2 example
this is module 1 print statement
this is module 2 print statement

Process finished with exit code 0

【讨论】:

  • 我按照您的说明做了一些事情,但收到与以前相同的错误
  • Traceback(最近一次调用最后):文件“BaseTest.py”,第 8 行,在 中来自 src.main.core.Utils.setup 导入加载 ModuleNotFoundError:没有名为“src”的模块
猜你喜欢
  • 2019-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2017-03-18
相关资源
最近更新 更多