2

私はすべてのパッケージを含むプロジェクトを持っています。nosetestsそれ自体は、そのプロジェクトに固有の virtualenv にインストールされ、~/.virtualenvs. ただし、M-x nosetests-oneand M-x nosetests-alletc は (明らかに) コマンドの virtualenv ディレクトリを調べることさえしないため、これらのコマンドは失敗し、コマンドが見つからないbinというエラー メッセージが表示されます。nosetestsそうでない場合でもnosetests、グローバル環境ではなく virtualenv 内からテストを呼び出す必要があるため、間違ったバイナリを呼び出すことになります。

解決策を見つけるためにいくつかのGoogle検索を試しましたがnose-global-name、プロジェクトの.dir-locals.elファイルでハードコードされた値に設定するだけの既存のハッキーな(しかしシンプルで信頼できる)アプローチよりも優れたものを見つけることができませんでした:

((nil . ((nose-global-name . "~/.virtualenvs/myproject/bin/nosetests"))))

しかし、これは実行可能な解決策ですが、新しいプロジェクトごとに手動で調整する必要のない、より一般的な解決策があることを願っています。

4

1 に答える 1

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)))
于 2013-10-15T16:50:23.130 に答える