我尝试导入模块进行测试但收到此错误:
追踪(最近一次通话): 文件“BaseTest.py”,第8行,in 来自.main.pageobjects.FBPage import * ModuleNotFoundError:没有名为' main .main'的模块; ' main '不是包
项目树如下所示:
/- 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 *
我在这做错了什么? :)
答案 0 :(得分:3)
您必须在模块下导入特定的类(或类)。请参阅下面的代码片段。我已经解释了代码下面的逻辑。
from src.main.core.pageobjects.Module.module1 import Module1
from src.main.core.pageobjects.Module.module2 import Module2
在模块内部,我创建了两个python文件:模块1和模块2;在module1中,我创建了一个类 - Module1;在module2中,我创建了一个类 - 模块2;然后我使用下面的代码片段导入包中的两个类
src.tests.BaseTest
单击项目结构屏幕截图的链接。 How to import a module from different directory with Python 3? 请参阅BaseTest模块下的module1,module2和logintest的python代码。
类Module1(对象): def init (个体经营): print('这是模块1示例')
def print_info(self):
print("this is module 1 print statement")
class Module2(object): def init (个体经营): print('这是一个模块2示例')
def print_info(self):
print("this is module 2 print statement")
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
答案 1 :(得分: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
。