Tôi nghĩ rằng vấn đề là cách chế độ python của Emacs chạy Python.Nếu tôi gõ M-x run-python
, sau đó tôi thấy điều này:
>>> import sys
>>> '' in sys.path
False
>>>
trong khi nếu tôi chạy thông dịch viên python từ vỏ, tôi thấy:
>>> import sys
>>> '' in sys.path
True
>>>
này có vẻ là do đoạn mã sau vào run-python
từ progmodes/python.el:
(let* ((cmdlist
(append (python-args-to-list cmd)
'("-i" "-c" "import sys; sys.path.remove('')")))
mà không có ý kiến, và sự xâm nhập ChangeLog hữu ích sau đây:
2008-08-24 Romain Francoise <[email protected]>
* progmodes/python.el (run-python): Remove '' from sys.path.
Tôi có thể nói đây là lỗi trong Emacs. Dưới đây là một cách giải quyết mà bạn có thể đặt trong emacs tập tin của bạn:
(defun python-reinstate-current-directory()
"When running Python, add the current directory ('') to the head of sys.path.
For reasons unexplained, run-python passes arguments to the
interpreter that explicitly remove '' from sys.path. This means
that, for example, using `python-send-buffer' in a buffer
visiting a module's code will fail to find other modules in the
same directory.
Adding this function to `inferior-python-mode-hook' reinstates
the current directory in Python's search path."
(python-send-string "sys.path[0:0] = ['']"))
(add-hook 'inferior-python-mode-hook 'python-reinstate-current-directory)
Nguồn
2010-08-02 17:53:26
Tôi không cố gắng không tôn trọng bạn, tôi chỉ nói điều này bởi vì tôi chưa bao giờ gặp vấn đề như thế này, và tôi chỉ muốn chắc chắn về bạn, nhưng khi bạn thử chạy tập tin bình thường với python, bên ngoài emacs, nó chạy đúng không? – Nikwin
Ngoài ra, hãy thử chạy mã python sau: nhập os in os.listdir ('.') và xem thư mục nào nó in ra. – Nikwin
Vâng, tôi đã viết nó trong Scite và nó hoạt động. Tôi đang chuyển sang emacs bởi vì nó một chút năng động hơn (nó có một repl để kiểm tra mã ra một cách nhanh chóng trong khi scite chỉ chạy một lệnh python và hiển thị đầu ra). Không lấy tất nhiên hành vi phạm tội :) – smith