【问题标题】:get site-packages folder from a python unittest从 python unittest 获取站点包文件夹
【发布时间】: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.ininclude_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?项目?因为你的问题使它看起来像它。或者您是说生产中的数据与源代码库中的数据不同?

标签: python package


【解决方案1】:

事实上

python setup.py test

不会从python setup install 放置的地方 (~/venv/lib/python2.7/site-packages/proj-xxx) 加载 python 包,而是从运行python setup.py test 的地方加载。

这就是为什么:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 2021-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多