【发布时间】:2016-05-05 02:13:40
【问题描述】:
我有一个标准的 python proj 包::
proj/
├── proj
│ ├── data
│ │ └── data.csv
│ ├── __init__.py
│ └── lib.py
├── MANIFEST.in
├── setup.py
└── tests
├── __init__.py
└── lib_test.py
data/data.csv 使用 MANIFEST.in 和 include_package_data 键安装在 setup.py::
~/proj$ more setup.py
from setuptools import setup
setup(name='proj',
version=1.0,
packages=['proj'],
test_suite = 'tests',
include_package_data=True,
zip_safe=False)
~/proj$ more MANIFEST.in
include proj/data/*.csv
所以在python setup.py install data.csv 在我想要的站点包中的位置之后::
$ tree ~/venv/lib/python2.7/site-packages/proj-1.0-py2.7.egg
~/venv/lib/python2.7/site-packages/proj-1.0-py2.7.egg
├── EGG-INFO
│ └── ...
└── proj
├── data
│ └── data.csv
├── __init__.py
└── ...
在 setup.py 中,声明了 test_suite,所以当我首先从 proj 调用 test 时
文件夹,这很好用::
~/proj$ python setup.py test
running test
...
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
我想在我的 unitest 中使用来自:~/venv/lib/python2.7/site-packages/proj-1.0-py2.7.egg/proj/data/data.csv 的 data.csv 文件。
简而言之,获取 ~/venv/lib/python2.7/site-packages/proj-1.0-py2.7.egg/proj/data/ 文件夹的方法。
使用此代码::
$ more tests/lib_test.py
import unittest, os, proj
from proj.lib import get_data
class TestUtils(unittest.TestCase):
def test_get_data(self):
datapath = os.path.dirname(os.path.abspath(proj.__file__)) + '/data'
data = '{}/data.csv'.format(datapath)
print '\n my data:', data
if __name__ == '__main__':
unittest.main()
使用__file__我只成功得到~/sandbox/proj/proj/data/data.csv::
$ python setup.py test
running test
...
test_get_data (tests.lib_test.TestUtils) ...
my data: ~/sandbox/proj/proj/data/data.csv
ok
----------------------------------------------------------------------
Ran 1 test in 0.000s
【问题讨论】:
-
所以你想让你的本地开发版本使用来自系统级安装包的单元测试吗?由于某些原因,这似乎是一个坏主意,您能否详细说明您为什么想要/需要这样做?
-
-
这些脚本是 proj 的一部分吗?如果是这样,他们不会安装它,所以会使用安装的数据文件吗?您的问题是专门询问单元测试,而您实际上并没有回答我关于为什么需要这样做的问题。
-
换句话说,我已经成功部署了一些与代码打包的数据(在站点包中),所以我希望能够从我的 python 代码中获取它,我的 unittest python 代码是用例之一。
-
你是说data.csv实际上并不作为源代码的一部分存在?repo?项目?因为你的问题使它看起来像它。或者您是说生产中的数据与源代码库中的数据不同?