如何使用Python 3从不同目录导入模块?

时间:2017-12-24 15:03:17

标签: python

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

  

追踪(最近一次通话):     文件“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 *

我在这做错了什么?  :)

2 个答案:

答案 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.py

类Module1(对象):     def init (个体经营):         print('这是模块1示例')

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

module2.py

class Module2(object):     def init (个体经营):         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

答案 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