如何在Python中导入文件?

如何在Python中导入文件?,python,python-import,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. fr

我正在尝试使用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')

我还尝试了在根目录和src目录中使用和不使用_init__u;.py文件。但是每次,我都会得到一些关于错误E ModuleNotFoundError的变化:没有名为“return\u self”的模块。我怎样才能在我的文件中进行请求?

您可以尝试以下方法:

# 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

首先,您必须检查src/和tests/是否在同一目录中,我在return\u self\u test.py中检查了函数importing return\u self,如下所示:

Testpy搜索带有test_u[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
最后,使用以下命令在正确路径或Pycharm终端的cmd中进行测试: py.test-v,瞧!完成了:

我将向您推荐使您的软件包可分发的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'
)
[aliases]
test=pytest
在这里,我们正在配置我们的测试环境,您可以扩展tests_require变量以包含更多的测试需求

setup.cfg文件内容:

from setuptools import setup

setup(
    setup_requires=['pytest-runner'],
    tests_require=['pytest'],
    name='sample'
)
[aliases]
test=pytest
在这里,我们指定每次开发人员执行pytest时都要运行命令pytest:python setup.py test

测试/测试\u返回\u 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
样本/返回\u 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
因此,下一步要做的是运行:

python setup.py develop
使您的包在运行测试时可用。如果您遇到权限被拒绝的问题:将-user选项附加到前面的命令中,以指示python您希望在没有根权限的情况下使用该包——简而言之,该包将安装到userland目录中

最后使用以下方法运行测试:

python setup.py test
注:

通过使用这种方法,您将能够动态地修改项目代码。python setup.py develope只需运行一次 没有难看的语句将源目录注入当前python路径。 参考资料:


src/和tests/在同一个目录中吗?@pythad是的。谢谢,它能工作!我不明白为什么python需要5行代码才能导入文件?@adc17,您可以从系统路径上的目录、当前目录或包中的子目录导入内容。这就是为什么您需要将外部路径添加到系统路径中,以便让python看到您的其他文件夹谢谢您,那么我组织测试的方式是否不同寻常呢?如果我没有遵循正确的约定,请告诉我。@adc17,不,将所有测试放在tests/文件夹中是一个很好的做法,在您的模块成为一个包之前,此导入有点困难,您需要知道谢谢@pythad,最后一个问题。您知道这段代码如何在不增加行的情况下导入所需的函数吗?