如何导入 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
我正在尝试使用 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