[英]setup.py nosetests command throws ImportError when specifying package_dir
当setup.py指定与包名称不同的package_dir时,由于ImportError导致setup.py鼻子测试功能失败。 以下是一个最小的示例。
目录结构:
setup.py
src/
__init__.py
myclass.py
unittests/
__init__.py
test.py
初始化文件为空。 MyClass很简单:
class myclass():
def __init__():
a=10
test.py只是实例化myclass的实例:
import unittest
import mypkg
class Tests(unittest.TestCase):
def _run_test(self):
a = mypkg.myclass()
并且setup.py文件如下
from setuptools import setup
setup(
name = 'mypkg',
packages = ['mypkg'],
package_dir={'mypkg':'src'}
)
它可以正确构建和安装,但是在安装之前您会得到:
python3.4 setup.py nosetests
running nosetests
running egg_info
writing top-level names to mypkg.egg-info/top_level.txt
writing dependency_links to mypkg.egg-info/dependency_links.txt
writing mypkg.egg-info/PKG-INFO
reading manifest file 'mypkg.egg-info/SOURCES.txt'
writing manifest file 'mypkg.egg-info/SOURCES.txt'
E
======================================================================
ERROR: Failure: ImportError (No module named 'mypkg')
----------------------------------------------------------------------
Traceback (most recent call last):
:
:
:
File "<root_dir>/unittests/test.py", line 2, in <module>
import mypkg
ImportError: No module named 'mypkg'
----------------------------------------------------------------------
Ran 1 test in 0.026s
FAILED (errors=1)
我将其追回去,并且很确定会发生这种情况,因为在setup.py中,我通过使用package_dir有效地重命名了目录。 在不更改目录结构的情况下,使鼻子测试有效吗?
注意:这是使用python3.4和setuptools 2.1版以及鼻子测试1.3.4版运行的
您好,您必须指定包含mypkg的py文件:
from yourfile import mypkg
谢谢
我已经找到了一种方法,尽管它不是很漂亮。但是这里有:
确保鼻子测试实际上可以访问所有内容的一种方法是在运行鼻子测试之前进行构建。 用于setuptools的Nosetests命令实际上会执行此操作,但是如果可以的话,它会很懒,并尝试就地运行测试-由于安装魔术师重新安排了程序包的结构,因此失败。 要在执行之前强制进行鼻子测试,请添加标志
use_2to3 = True
到setup.py命令。
请注意,如果您不希望2to3运行(例如您有一些python2.7模块对此感到满意),则此方法将无效。
最后,除了setup.py之外,其他所有内容都保持不变,如下所示:
from setuptools import setup
setup(
name = 'mypkg',
packages = ['mypkg','unittests'],
package_dir={'':'src'},
use_2to3 = True,
)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.