我有一个标准的python项目包:
proj/
├── proj
│ ├── data
│ │ └── data.csv
│ ├── __init__.py
│ └── lib.py
├── MANIFEST.in
├── setup.py
└── tests
├── __init__.py
└── lib_test.py
data/data.csv
与一起安装清单.in和包含包数据键入设置.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
数据.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
└── ...
在设置.py,test\u 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
文件/数据.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/数据.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
事实上
不从
python setup install
处加载python包(~/venv/lib/python2.7/site packages/proj xxx),而是从python setup.py test
处运行。你知道吗这就是为什么:
我们无法捕获
site-package
文件夹,只能捕获工作副本文件。你知道吗相关问题 更多 >
编程相关推荐