Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么不是';你不知道我想要什么吗?_Python_Nose - Fatal编程技术网

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!"
然后安装多个软件包:

  • 分发自
  • 嗅到
  • 来自
  • 所有这些我都做得很顺利(一旦我从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会出现如下错误:

    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 
    

    给我一个包裹。鸡蛋信息,我不知道那是什么!

    我想这是怎么回事:

    他试着教两件事

  • 带有文件caled
    \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