Python 为什么不是';你不知道我想要什么吗?
我过去经常自学编程。年,他们被指示做一些事情:Python 为什么不是';你不知道我想要什么吗?,python,nose,Python,Nose,我过去经常自学编程。年,他们被指示做一些事情: $ mkdir -p projects $ cd projects/ $ mkdir skeleton $ cd skeleton $ mkdir bin NAME tests docs $ touch NAME/__init__.py $ touch tests/__init__.py 以下是setup.py的内容: 尝试: 从设置工具导入设置 除恐怖外: 从distutils.core导入设置 config = { 'descri
$ mkdir -p projects
$ cd projects/
$ mkdir skeleton
$ cd skeleton
$ mkdir bin NAME tests docs
$ touch NAME/__init__.py
$ touch tests/__init__.py
以下是setup.py的内容:
尝试:
从设置工具导入设置
除恐怖外:
从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)
测试/名称_tests.py:
from nose.tools import *
import NAME
def setup():
print "SETUP!"
def teardown():
print "TEAR DOWN!"
def test_basic():
print "I RAN!"
然后安装多个软件包:
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会出现如下错误:
cp -r skeleton foobar
ImportError:没有名为NAME的模块
然后zed去了
grep -r "NAME" .
(这给了他)
./tests/foobar\u tests.py:导入名称
然后他解释说,“这是单元测试的一大优点,因为它们捕捉到了这些错误(zeds的错误显然是他没有将import NAME重命名为import foobar)
因此,当我运行nosetests(即使我也没有将名称重命名为foobar)以使其更加复杂时,我没有得到这个错误。zed说,nosetests应该只从父目录(即skeleton或foobar)运行,而不是从类似子目录的名称运行……但是当我从NAME运行nosetest时
drewvcomp/project/foobar/name: >>> 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/plat-linux2','/usr/lib/python2.7/lib-tk','/usr/lib/python2.7/lib-old','/usr/lib/python2.7/lib-dynload','/usr/python2.7/distthon2.7/packages','ib/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/python2.7/dist-packages/ubuntu-sso-client'、'/usr/lib/python2.7/dist-packages/ubuntune-client/ubuntuon/ubuntuone-client'、'/usr/distthon2.7/packageskages/ubuntuone coach'、'/usr/lib/python2.7/dist packages/ubuntuone installer'、'/usr/lib/python2.7/dist packages/ubuntuone存储协议'、'/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
给我一个包裹。鸡蛋信息,我不知道那是什么!我想这是怎么回事: 他试着教两件事
\uuuu init\uuuu.py
的目录可以作为中的模块导入
蟒蛇skeleton/
bin/
..
NAME/
__init__.py
..
tests/
__init__.py
..
docs/
..
然后他复制这个模板结构,做如下操作:
cp -r skeleton foobar
所以你最终会得到几乎相同的结果:
foobar/
bin/
..
NAME/
__init__.py
..
tests/
__init__.py
..
docs/
..
现在您仍然有一个名为NAME
的目录,其中包含一个\uuuu init\uuuu.py
,可以在python中导入。因此,您的unittests不会抱怨
现在,根据你所说的,我猜,他不仅复制了骨架,而且还将名称重命名为其他名称,因为他想将克隆的骨架用于新项目或其他项目。因此,他可能有更像:
foobar/
bin/
..
someothername/
__init__.py
..
tests/
__init__.py
..
docs/
..
现在他的同事们抱怨说,因为他还没有更新他的import
语句,所以它试图导入NAME
,但正如你所看到的,没有包含\uu init\uuuuuuuy.py
的目录
所以我猜,在现场练习之后,你错过了一个步骤,他将NAME
重命名为somethingelse
,这就是为什么你以后不能复制它的原因
更新: 使用: 及
要查看代码在何处找到模块“NAME”我认为到目前为止,问题的最后一部分还没有得到回答: 此外,如果您能够阅读所有这些,我将永远爱您,如果您能就本章第6步提供一些建议: 使用setup.py安装,使用pip卸载 关于stackoverflow的另一个问题中有一个问题。我认为您的问题的答案在最后。我认为“使用setup.py安装”的意思是:
python setup.py sdist
然后,如果模块名为NAME,则运行:
sudo pip install NAME-0.1.tar.gz # or a similar filename in the /dist/ directory that is created
要卸载,请运行:
sudo pip uninstall NAME
我也将我的名称文件夹重命名为我的项目名称。但你让我思考!也许我将项目添加到了python/库路径或其他什么。我会再看一看。无论如何,谢谢你的帮助!是的,这可能是我忘了提的另一种可能性,因为你复制了旧的sekleton/NAME文件夹,如果skel伊顿是你的python路径。你会看到的。事实上,这里有一个方便的提示:python有一个名为“imp”的模块,使用它可以查看在哪里找到模块。import imp;print imp.find_module(“NAME”);
sudo pip uninstall NAME