2010-08-18 2 views
3

Я проследовал по этой ссылке here, чтобы попытаться настроить emacs для python dev на окнах. Хотя все кажется прекрасным, pyflakes создает проблемы и не дает мне проверку синтаксиса. Каждый раз, когда я открываю файл «.py», я получаю ошибку «Не удалось запустить процесс проверки синтаксиса« pyflakes »с помощью args« foo.py »: поиск программы: нет такого файла или директории pyflakes»Проблема с pyflakes в emacs на Windows

Может ли кто-либо Пожалуйста, помогите мне с этим?

Обновление:

Вот мой .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) 
+0

Возможно, вы допустили ошибку в своих .emacs. У этих инструкций было много изменений. Возможно, вам следует перепроверить, чтобы в ваших модификациях все было правильно. В противном случае опубликуйте свои .emacs и, возможно, мы сможем найти ошибку. – Starkey

ответ

2

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

flymake называет start-process который ищет программу в exec-path каталогов (C-чvexec-pathRET)

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

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

+0

Я действительно работаю над окнами, поэтому я загрузил PyFlakes и установил setup.py python для pyflakes. Я пробовал делать ваши вещи, но, похоже, не работает. – Abhi

+0

Извините, я, должно быть, очистил бит Windows от своего мозга, как только я последовал этой ссылке, ориентированной на Ubuntu. Это по-прежнему звучит как проблема пути. Каков ваш emacs exec-path? Где установлены пироксеты? Можете ли вы запустить pyflakes успешно вне emacs? В частности, можете ли вы запустить его как «pyflakes», или вам нужно расширение для Windows, чтобы использовать его? (возможно, файл pyflakes.bat или .cmd?) – phils

+0

На самом деле, я не могу запустить pyflakes из командной строки как есть. Может быть, это и есть проблема. Я установил pyflakes justtt как веревку, и файлы пакета находятся под pythonrootdir \ Lib \ site-packages \ pyflakes Правильно? Где я должен установить pyflakes. Я где-то читал, что мы должны установить переменную среды пути с помощью пути к pyflakes exe. Если да, в какой папке я ее сопоставляю? Есть идеи? Мой путь emacs exec, который я чувствую, прекрасен, так как другие, подобные веревкам, работают нормально. – Abhi

5

Получил работу, наконец,!

Благодаря phils для указания меня в правильном направлении. После поиска в Интернете найден this и с помощью переводчика Google (страница на русском языке) смогла наконец получить синтаксическую проверку!

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

После установки 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 в "Путь" переменной среды

проблема решена !!!

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

Спасибо, Phils, Starkey и гельвуасы, конечно!

+0

всего лишь небольшая вещь здесь текст, который читает из pyflakes.scripts.pyflakes import main main() должен иметь main() на строке ниже предшествующего текста, то есть должен быть прямой канал непосредственно перед main() – glaucon

Смежные вопросы