从Python单元测试中获取site-packages文件夹

2024-04-25 23:45:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个标准的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

Tags: csv数据inpytestdatavenvinit
1条回答
网友
1楼 · 发布于 2024-04-25 23:45:26

事实上

python setup.py test

不从python setup install处加载python包(~/venv/lib/python2.7/site packages/proj xxx),而是从python setup.py test处运行。你知道吗

这就是为什么:

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

我们无法捕获site-package文件夹,只能捕获工作副本文件。你知道吗

相关问题 更多 >