如何导入 Python 中的文件?

How do I import files in Python?

我正在尝试使用 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__.py 文件。但每次,我都会得到一些关于错误 E ModuleNotFoundError: No module named 'return_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_self_test.py 中导入 return_self 的函数,这是这样的:

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 瞧!完成了 (:

我会建议您使用 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

tests/test_return_self.py

from pytest import *

from sample.return_self import return_self

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

sample/return_self.py

def return_self(n):
    return n

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

python setup.py develop

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

最后 运行 测试使用:

python setup.py test

备注:

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

参考文献:

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

Building and Distributing Packages with Setuptools