从python unittest获取站点包文件夹

从python unittest获取站点包文件夹,python,package,Python,Package,我有一个标准的pythonproj包: proj/ ├── proj │   ├── data │   │   └── data.csv │   ├── __init__.py │   └── lib.py ├── MANIFEST.in ├── setup.py └── tests ├── __init__.py └── lib_test.py data/data.csv与MANIFEST.in一起安装,并在setup.py中包含\u package\u数据键: ~/proj

我有一个标准的pythonproj包:

proj/
├── proj
│   ├── data
│   │   └── data.csv
│   ├── __init__.py
│   └── lib.py
├── MANIFEST.in
├── setup.py
└── tests
    ├── __init__.py
    └── lib_test.py
data/data.csv
与MANIFEST.in一起安装,并在setup.py中包含\u package\u数据键:

~/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安装后,
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_套件,因此当我首先从
proj
调用test时 文件夹,此文件夹工作良好::

~/proj$ python setup.py test
running test
...
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
我想在我的单元测试中使用
data.csv
文件,文件来自:~/venv/lib/python2.7/site-packages/proj-1.0-py2.7.egg/proj/data/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()
使用
\uu文件
我只成功地获得了~/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
其实

python setup.py test
不从
python setup install
put(~/venv/lib/python2.7/site packages/proj xxx)加载python包,而是从运行
python setup.py测试的位置加载

这就是为什么:

import proj, os
os.path.abspath(proj.__file__)

我们无法捕获
站点包
文件夹,只能捕获工作副本文件。

那么您希望本地开发版本使用系统级安装包中的unittests吗?出于几个原因,这似乎是一个坏主意,你能详细说明一下为什么你想/需要这样做吗?unittest不是唯一需要这些数据的公司,我需要这些数据.csv来自脚本,这些脚本将在我们使用轮子部署此项目后在生产中运行。这些脚本是项目的一部分吗?如果是这样的话,他们是不是安装了它,也会使用安装的数据文件?你的问题是关于单元测试的,而你实际上还没有回答我关于为什么需要这样做的问题。换句话说,我已经成功地部署了一些与代码打包的数据(在站点包中),所以我希望能够从我的python代码中获得它,我的unittest python代码是用例之一。你是说data.csv实际上不作为源代码的一部分存在吗?repo?为了proj?因为你的问题让它看起来像是。还是说生产中的数据与源回购中的数据不同?