Проблема с pyflakes в emacs на Windows - PullRequest
3 голосов
/ 18 августа 2010

Я перешел по этой ссылке здесь , чтобы попытаться настроить emacs для Python Dev на Windows. Хотя все выглядит нормально, Pyflakes создает проблемы и не дает мне проверку синтаксиса. Каждый раз, когда я открываю файл .py, я получаю сообщение об ошибке "Не удалось запустить процесс проверки синтаксиса" pyflakes "с аргументами" foo.py ": поиск программы: нет такого файла или каталога pyflakes"

Может ли кто-нибудь помочь мне с этим?

Обновление:

Вот мой .emacs

;; Abhi's  c:\.emacs file


(add-to-list 'load-path "C:/emacs/colors/")
(require 'color-theme)
(eval-after-load "color-theme"
  '(progn
     (color-theme-initialize)
     (color-theme-charcoal-black)))

(set-default-font "-outline-Monaco-normal-r-normal-normal-13-97-96-96-c-*-iso8859-1")

;Mappings to zoom in and out
(defun sacha/increase-font-size ()
  (interactive)
   (set-face-attribute 'default
                      (selected-frame)
                      :height
                      (ceiling (* 1.10
                                  (face-attribute 'default :height)))))
(defun sacha/decrease-font-size ()
  (interactive)
  (set-face-attribute 'default
                      nil
                      :height
                      (floor (* 0.9
                                  (face-attribute 'default :height)))))
(global-set-key (kbd "C-+") 'sacha/increase-font-size)
(global-set-key (kbd "C--") 'sacha/decrease-font-size)

;muse mode mappings
(add-to-list 'load-path "C:/emacs/Muse/muse-latest/lisp/")

(require 'muse-mode)
(require 'muse-latex)
(require 'muse-book)
(require 'muse-html)
(require 'muse-colors)


;To do list mode config
(add-to-list 'load-path "C:/emacs/lisp/") 
(autoload 'todo-list-mode "todo-list-mode") ;load when needed

;a simple function that opens the file,
;and switches to todo-list-mode.
(defun open-todo-list ()
  (interactive)
  (find-file "D:/AbhisLife/Tasks/TODO")
  (todo-list-mode))

;then bind to control-f12 so i can call it with one keystroke
;this works well for me because i also bind calendar to f12
(global-set-key [C-f12] 'open-todo-list)

;Python development
(require 'smart-operator)
(add-to-list 'load-path "~/.emacs.d/")
(require 'yasnippet)
(yas/initialize)
(yas/load-directory "~/.emacs.d/snippets/")
(require 'auto-complete)
(global-auto-complete-mode t)
;(require 'init-auto-complete)
(load-library "init_python")

А вот и мой init_python.el

(autoload 'python-mode "python-mode" "Python Mode." t)
(add-to-list 'auto-mode-alist '("\\.py\\'" . python-mode))
(add-to-list 'interpreter-mode-alist '("python" . python-mode))
(require 'python-mode)


(add-hook 'python-mode-hook
      (lambda ()
    (set-variable 'py-indent-offset 4)
    ;(set-variable 'py-smart-indentation nil)
    (set-variable 'indent-tabs-mode nil)
    (define-key py-mode-map (kbd "RET") 'newline-and-indent)
    ;(define-key py-mode-map [tab] 'yas/expand)
    ;(setq yas/after-exit-snippet-hook 'indent-according-to-mode)
    (smart-operator-mode-on)
    ))
;; pymacs
(autoload 'pymacs-apply "pymacs")
(autoload 'pymacs-call "pymacs")
(autoload 'pymacs-eval "pymacs" nil t)
(autoload 'pymacs-exec "pymacs" nil t)
(autoload 'pymacs-load "pymacs" nil t)
;(eval-after-load "pymacs"
;   (add-to-list 'pymacs-load-path "C:/Python26/MyDownloads/Pymacs/"))
(pymacs-load "ropemacs" "rope-")
(setq ropemacs-enable-autoimport t)


;(setq yas/trigger-key (kbd "C-c <kp-multiply>"))



;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Auto-completion
;;;  Integrates:
;;;   1) Rope
;;;   2) Yasnippet
;;;   all with AutoComplete.el
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun prefix-list-elements (list prefix)
  (let (value)
    (nreverse
     (dolist (element list value)
      (setq value (cons (format "%s%s" prefix element) value))))))
(defvar ac-source-rope
  '((candidates
     . (lambda ()
     (prefix-list-elements (rope-completions) ac-target))))
  "Source for Rope")
(defun ac-python-find ()
  "Python `ac-find-function'."
  (require 'thingatpt)
  (let ((symbol (car-safe (bounds-of-thing-at-point 'symbol))))
    (if (null symbol)
    (if (string= "." (buffer-substring (- (point) 1) (point)))
        (point)
      nil)
      symbol)))
(defun ac-python-candidate ()
  "Python `ac-candidates-function'"
  (let (candidates)
    (dolist (source ac-sources)
      (if (symbolp source)
      (setq source (symbol-value source)))
      (let* ((ac-limit (or (cdr-safe (assq 'limit source)) ac-limit))
         (requires (cdr-safe (assq 'requires source)))
         cand)
    (if (or (null requires)
        (>= (length ac-target) requires))
        (setq cand
          (delq nil
            (mapcar (lambda (candidate)
                  (propertize candidate 'source source))
                (funcall (cdr (assq 'candidates source)))))))
    (if (and (> ac-limit 1)
         (> (length cand) ac-limit))
        (setcdr (nthcdr (1- ac-limit) cand) nil))
    (setq candidates (append candidates cand))))
    (delete-dups candidates)))
(add-hook 'python-mode-hook
      (lambda ()
         (auto-complete-mode 1)
         (set (make-local-variable 'ac-sources)
              (append ac-sources '(ac-source-rope)))
         (set (make-local-variable 'ac-find-function) 'ac-python-find)
         (set (make-local-variable 'ac-candidate-function) 'ac-python-candidate)
         (set (make-local-variable 'ac-auto-start) nil)))
;;Ryan's python specific tab completion
(defun ryan-python-tab ()
  ; Try the following:
  ; 1) Do a yasnippet expansion
  ; 2) Do a Rope code completion
  ; 3) Do an indent
  (interactive)
  (if (eql (ac-start) 0)
      (indent-for-tab-command)))
(defadvice ac-start (before advice-turn-on-auto-start activate)
  (set (make-local-variable 'ac-auto-start) t))
(defadvice ac-cleanup (after advice-turn-off-auto-start activate)
  (set (make-local-variable 'ac-auto-start) nil))
(define-key py-mode-map "\t" 'ryan-python-tab)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; End Auto Completion
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Auto Syntax Error Hightlight
;(require 'flymake)

;;===== PyFlakes
;; code checking via pyflakes+flymake
;(load-file "C:/.emacs.d/flymake-cursor.el")

;Commented because this is giving  mea  problem


;(when (load "flymake" t)
;  (defun flymake-pyflakes-init ()
;    (let* ((temp-file (flymake-init-create-temp-buffer-copy
;              'flymake-create-temp-inplace))
;      (local-file (file-relative-name
;           temp-file
;           (file-name-directory buffer-file-name))))
;      (list "pyflakes" (list local-file))))
;  (add-to-list 'flymake-allowed-file-name-masks
;          '("\\.py\\'" flymake-pyflakes-init)))
;(add-hook 'find-file-hook 'flymake-find-file-hook)
;
;(provide 'init_python)

Ответы [ 2 ]

5 голосов
/ 19 августа 2010

Наконец-то все заработало!

Спасибо Филсу за то, что он указал мне правильное направление.После поиска в Google нашел this и с помощью гугл-переводчика (страница на русском языке) смог наконец заставить работать проверку синтаксиса!

Подробности на английском:

После установки pyflakes обычным способом выполните следующие действия:

  1. Создайте файл с именем runpyflakes.py в _YourPythonRootDir_\Scripts со следующим кодом:

    from pyflakes.scripts.pyflakes import main
    main()
  2. Создать файл с именем "pyflakes.bat" в _YourPythonRootDir_\Scripts со следующими строками:

    @_YourPythonRootDir_\python.exe _YourPythonRootDir_\Scripts\runpyflakes.py %*
  3. Добавить _YourPythonRootDir_\Scripts в переменную среды "Path"

ПРОБЛЕМА РЕШЕНА !!!

Примечание: _YourPythonRootDir_ = путь к корневому каталогу Python в вашей системе.По моему это C:\Python26\

Спасибо, Филс, Старки и, конечно же, Джелваос !!!

2 голосов
/ 19 августа 2010

Если вы использовали apt-get как в этих инструкциях, тогда я не представляю, что это проблема с разрешениями *, поэтому похоже, что emacs просто не видит исполняемый файл.

flymake вызывает start-process, чтоищет программу в каталогах exec-path ( Ch v exec-path RET )

Вы можете поместить что-то вроде (add-to-list 'exec-path "~/bin")в вашем .emacs, чтобы сделать видимым соответствующий каталог.

(*) Если вы не установили его с менеджером пакетов, OTOH, то я бы также проверил разрешения.

...