如何在Python中导入文件?

时间:2017-07-08 22:47:14

标签: python python-import

我尝试使用pytest检查功能 - 这是我的代码:

# src/return_self.py
def return_self(n):
    return n


# tests/return_self_test.py
import pytest

def test_1():
    value = return_self(1)
    assert value == 1

如何在src文件中提出要求,以便我可以使用pytest对其进行测试?我尝试了一些事情:

1. import return_self
2. from src.return_self import *
3. import sys
   sys.path.append('../src')
4. import imp
   return_self = imp.load_source('return_self', '/source/return_self.py')

我还在根目录和__init__.py目录中尝试使用和不使用src文件。但每次,我都会对错误E ModuleNotFoundError: No module named 'return_self'进行一些修改。我如何在我的档案中要求?

3 个答案:

答案 0 :(得分:3)

您可以尝试这种方法:

# tests/return_self_test.py

import os
import sys
import pytest

sys.path.insert(1, os.path.join(sys.path[0], '..'))

from src.return_self import return_self

def test_1():
    value = return_self(1)
    assert value == 1

答案 1 :(得分:2)

首先,你必须检查src /和tests /是否在同一个目录中,我检查了return_self中导入return_self_test.py的函数,结果如下:

Testpy搜索 test_ [prefix] 的文件,所以我建议将return_self_test.py更改为test_return_self.py

# src/return_self.py
def return_self(n):
    return n


# tests/test_return_self.py
import return_self

def test_1():
    value = return_self.return_self(1)
    assert value == 1

最后,使用以下命令在cmd(在正确的路径中)或Pycharm终端中进行测试: py.test -v 瞧!它完成了(:

答案 2 :(得分:2)

我会建议setuptools方法(使您的包可以分发:D

项目文件'结构:

.
├── sample
│   ├── __init__.py
│   └── return_self.py
├── setup.cfg
├── setup.py
└── tests
    └── test_return_self.py

其中sample/目录与包的名称匹配,并且还必须包含源。

最小 setup.py 文件内容:

from setuptools import setup

setup(
    setup_requires=['pytest-runner'],
    tests_require=['pytest'],
    name='sample'
)

这里我们正在配置我们的测试环境(您可以扩展tests_require变量以包含更多测试要求)。

setup.cfg 文件内容:

[aliases]
test=pytest

在这里我们指定每次开发人员执行时都要运行命令pytest:python setup.py test

<强>测试/ test_return_self.py

from pytest import *

from sample.return_self import return_self

def test_return_self():
     assert return_self(4) == 4

<强>样品/ return_self.py

def return_self(n):
    return n

所以,接下来要做的就是运行:

python setup.py develop

使您的包可用(运行测试时)。如果您遇到权限被拒绝问题:将--user选项附加到上一个命令以指示python您想要使用没有root权限的软件包 - 简而言之,软件包将安装到用户区目录中。 / p>

最后使用:

运行测试
python setup.py test

注意:

  • 通过使用此方法,您可以动态更改项目代码(python setup.py develop只需运行一次)
  • 没有丑陋的语句将源目录注入当前的python路径。

参考文献:

Integrating with setuptools / python setup.py test / pytest-runner

Building and Distributing Packages with Setuptools