在一个virtualenv中调用Emacs中的nosetests

时间:2013-10-15 16:12:46

标签: python emacs virtualenv nosetests

我有一个项目所有的包,包括。 nosetests本身安装在特定于该项目的virtualenv中,存储在~/.virtualenvs下。但是,M-x nosetests-oneM-x nosetests-all等(显然)甚至没有查看virtualenv bin目录中的命令,因此这些命令失败并显示一条错误消息,指出命令{{1}无法找到;即使不是这样,他们也会调用错误的nosetests二进制文件,因为我需要在我的virtualenv中调用测试而不是全局环境。

我已经尝试了几次谷歌搜索来找到解决方案,但我找不到比我现有的hacky(但简单可靠)方法更好的方法,只需将nosetests设置为硬编码值即可。项目的nose-global-name文件:

.dir-locals.el

但是,尽管这是一个可行的解决方案,但我希望有一个更通用的解决方案,不需要对每个新项目进行手动调整。

1 个答案:

答案 0 :(得分:2)

看看这段代码。它将项目名称提取为父目录 (nose-find-project-root)。在你的情况下,它是myproject。然后呢 暂时将nose-global-name设置为您当前拥有的那个(自当前项目以来) 名称是nosetests)。

(defun nosetests-all-virtualenv ()
  (interactive)
  (let ((nose-global-name
         (format 
          "~/.virtualenvs/%s/bin/nosetests"
          (car 
           (last 
            (delete 
             ""
             (split-string
              (nose-find-project-root)
              "/")))))))
    (nosetests-all)))