【发布时间】:2012-03-07 04:37:24
【问题描述】:
我正在使用learn python the hard way 2nd edition 来自学编程。在exercise 46 中被指示做一些事情:
$ mkdir -p projects
$ cd projects/
$ mkdir skeleton
$ cd skeleton
$ mkdir bin NAME tests docs
$ touch NAME/__init__.py
$ touch tests/__init__.py
这里是 setup.py 的内容:
尝试: 从 setuptools 导入设置 导入错误除外: 从 distutils.core 导入设置
config = {
'description': 'My Project',
'author': 'My Name',
'url': 'URL to get it at.',
'download_url': 'Where to download it.',
'author_email': 'My email.',
'version': '0.1',
'install_requires': ['nose'],
'packages': ['NAME'],
'scripts': [],
'name': 'projectname'
}
setup(**config)
测试/NAME_tests.py:
from nose.tools import *
import NAME
def setup():
print "SETUP!"
def teardown():
print "TEAR DOWN!"
def test_basic():
print "I RAN!"
然后安装一些包:
- 来自http://pypi.python.org/pypi/pip的点子
- 从http://pypi.python.org/pypi/distribute分发
- 来自http://pypi.python.org/pypi/nose/的鼻子
- 来自http://pypi.python.org/pypi/virtualenv的virtualenv
所有这些我都没有大惊小怪(一旦我从 Windows 切换到 Ubuntu)。
Zed(LPTHW 的作者)然后说你可以通过这样做来测试你是否做对了所有事情:
drewverlee@ubuntu:~/projects/skeleton$ nosetests
.
----------------------------------------------------------------------
Ran 1 test in 0.020s
OK
drewverlee@ubuntu:~/projects/skeleton$
太棒了!
但这就是问题所在。在 udemy 课程(在线教程课程)中,他将骨架复制到一个测试项目中(cp -r skelton foobar),他大致做了......
zedscomp/projects/foobar: >>> nosetests
然后 zed 收到类似以下的错误:
ImportError: 没有名为 NAME 的模块
那么zed就去了……
grep -r "NAME" .
(给了他)
./tests/foobar_tests.py:import NAME
然后他解释说“这是单元测试的伟大之处,因为它们会捕获这些错误(zeds 错误显然是他没有将 import NAME 重命名为 import foobar)
所以当我运行nosetests 时我没有得到那个错误(即使我也没有将NAME 重命名为foobar)以进一步复杂化它说nosetests 应该只从父目录运行,即skeleton 或foobar,而不是从像 NAME 这样的孩子......但是当我从 name 运行鼻子测试时
drewvcomp/project/foobar/name: >>> nosetests
它运行得很好。
所以在阅读了很多关于nosetests 并且没有真正看到我应该想办法解决这个问题之后,我只是使用删除了我的整个项目文件夹
rm -rf 项目
并重建它。但没有运气,问题仍然存在。
下面的建议让我觉得也许项目(以及其中的所有内容?)正在被 python 检查。在这种情况下,当我在 foobar 中运行 nosetests 时没问题,因为它能够导入一个名为 NAME 的模块(它存在于原始骨架目录中)。
所以:
导入系统 系统路径 ['', '/usr/local/lib/python2.7/dist-packages', '/usr/local/lib/python2.7/dist-packages/projectname-0.1-py2.7.egg', '/ usr/lib/python2.7'、'/usr/lib/python2.7/plat-linux2'、'/usr/lib/python2.7/lib-tk'、'/usr/lib/python2.7/lib -old'、'/usr/lib/python2.7/lib-dynload'、'/usr/local/lib/python2.7/dist-packages'、'/usr/lib/python2.7/dist-packages' , '/usr/lib/python2.7/dist-packages/PIL', '/usr/lib/python2.7/dist-packages/gst-0.10', '/usr/lib/python2.7/dist-packages /gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client', '/usr/lib/python2.7/ dist-packages/ubuntuone-client','/usr/lib/python2.7/dist-packages/ubuntuone-control-panel','/usr/lib/python2.7/dist-packages/ubuntuone-couch',' /usr/lib/python2.7/dist-packages/ubuntuone-installer', '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol', '/var/src/Django-1.3.1 ', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
哎呀!我需要把它清理干净!除了原来的和 django 之外,我真的不需要太多其他的(我应该在哪里安装?...)
如果你能读完所有这些,如果你能就本章的第 6 步提供一些建议,我会永远爱你:
- 使用 setup.py 安装并使用 pip 卸载
我的意思是如何...因为
setup install
给我一个 package.egg-info,我不知道那是什么!
【问题讨论】: