ipython đọc sai phiên bản python


103

Tôi đã gặp sự cố với Python, iPython và các thư viện. Các điểm sau đây cho thấy chuỗi các vấn đề. Tôi đang chạy Python 2.7 trên Mac Lion.

  1. iPython không đọc các thư viện của scipy, matplotlib, nhưng nó đọc numpy.
  2. Để khắc phục điều này, tôi đã thử cài đặt phiên bản mã nguồn của Python và nó chỉ mang lại cho tôi nhiều vấn đề hơn vì bây giờ tôi có hai phiên bản khác nhau: 2.7.1 và 2.7.2
  3. Tôi nhận thấy rằng đang chạy Python, sử dụng phiên bản 2.7.2 và nhập scipy, matplotlib và numpy, nhưng trên iPython, phiên bản là 2.7.1 không mở scipy hoặc matplotlib.

Tôi đã thử một số điều mà tôi gặp phải từ các bài đăng blog khác. Nhưng không ai trong số họ đã giúp đỡ, và cũng không may là tôi không biết mình đang làm gì với một số người trong số họ. Ví dụ: Tôi đã thử gỡ cài đặt và cài đặt lại ipython bằng easy_install và pip. Tôi cũng đã thử cài đặt lại mọi thứ thông qua homebrew và sửa đổi đường dẫn .bash_profile.


6
Tập ipythonlệnh được "gắn" với phiên bản Python cụ thể mà nó đã được cài đặt - nó sẽ không tự động chuyển sang những gì bạn đã cài đặt lần trước. Nếu lần đầu tiên bạn cài đặt 2.7.1, sau đó là IPython, sau đó là 2.7.2 từ nguồn, IPython của bạn sẽ tiếp tục sử dụng 2.7.1. Bạn cần phải hoàn tác tất cả lỗi của mình, quay lại phiên bản Python ban đầu của bạn và tìm ra lý do đằng sau điểm 1; cách khác, cài đặt lại IPython bằng cách sử dụng bất kỳ cài đặt Python nào có thể truy cập các thư viện bạn cần.
millimoose

Bạn có thể cụ thể hơn được không? ... cảm ơn
Diego-MX

1
Cụ thể về phần nào? Cách khởi động IPython hoạt động hoặc làm thế nào để khắc phục sự cố?
millimoose

1
Về cơ bản, khi bạn cài đặt bất kỳ "chương trình" python nào, như IPython hoặc thậm chí easy_install, tập lệnh khởi động cho chương trình được đặt để luôn sử dụng tệp thực thi python mà nó đã được cài đặt. Vì vậy, nếu bạn có Python 2.7.1 mà không có thư viện của mình, và sau đó cài đặt IPython, thì IPython được cài đặt "vào" cài đặt Python 2.7.1 và liên kết đến ipythontệp thực thi được đặt trên PATH của bạn. Nếu sau đó bạn cài đặt Python 2.7.2 từ nguồn, thì đó là một bản sao mới, riêng biệt của Python, nó sẽ không nâng cấp 2.7.1 hiện có có IPython trong đó. Vì vậy, IPython sẽ không nhìn thấy bản sao 2.7.2 hoặc bất kỳ thư viện nào trong đó.
millimoose

1
Các thư viện hoạt động giống nhau. Nếu bạn đã cài đặt numpy, v.v. sau khi cài đặt Python 2.7.2 từ nguồn, chúng có thể đã được cài đặt vào thư mục 2.7.2. Điều này có nghĩa là phiên bản Python 2.7.1 sẽ không thấy các thư viện đó. Vì IPython đã được cài đặt với 2.7.1, nó cũng không thể nhìn thấy các thư viện đó. Về cơ bản, bạn có thể có bao nhiêu bản sao hoàn toàn riêng biệt của Python trên hệ thống của mình tùy thích, nhưng có thể khó theo dõi xem bản nào được sử dụng để làm gì. Trừ khi bạn biết mình đang làm gì, tốt nhất bạn nên bắt đầu với phiên bản Python tích hợp sẵn và chỉ cần cài đặt lại các thư viện bị thiếu
millimoose 23/02/12

Câu trả lời:


147

Được rồi, sửa nhanh:

which python

cho bạn /usr/bin/python, phải không? Làm

which ipython

và tôi cá rằng đó sẽ là /usr/local/bin/ipython . Hãy nhìn vào bên trong:

Chỉnh sửa 9/7/16 - Tệp bây giờ trông giống như sau:

cat /usr/local/bin/ipython

#!/usr/bin/python

# -*- coding: utf-8 -*-
import re
import sys

from IPython import start_ipython

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
    sys.exit(start_ipython())

Và của tôi hoạt động bình thường như thế này, nhưng tình hình của tôi không giống hoàn toàn của OP.


Câu trả lời gốc - 30/9/13:

cat /usr/local/bin/ipython

#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'ipython==0.12.1','console_scripts','ipython'
__requires__ = 'ipython==0.12.1'
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.exit(
        load_entry_point('ipython==0.12.1', 'console_scripts', 'ipython')()
    )

Aha - mở /usr/local/bin/ipythontrong trình chỉnh sửa của bạn (với các đặc quyền) và thay đổi dòng đầu tiên thành

#!/usr/local/bin/python

lưu, khởi động iPython, nên nói rằng nó đang sử dụng phiên bản bạn muốn bây giờ.


41
nghi ngờ, python -m IPythontương đương với ipython, mong đợi bạn chắc chắn sử dụng đúng Python.
Mat

2
cũng nhớ đóng thiết bị đầu cuối và mở thiết bị đầu cuối mới. vì PATH được lưu vào bộ đệm bởi shell để có hiệu quả. đây là cách tôi có giải pháp này làm việc cho tôi. xem: conda.pydata.org/docs/…
parsethis

@Matt. Tôi cũng từng trải. Trường hợp của tôi là "python -m IPython" sẽ gọi đúng phiên bản tôi muốn. Nhưng chỉ là 'ipython', nó bắt đầu một bản sao sử dụng python2 cũ. Điều bí ẩn là nếu tôi thực hiện "cuộc chạy đua nào", nó sẽ trỏ đến bản sao virtualenv với nội dung tệp python đó rõ ràng là chính xác.
kawingkelvin

15

Đăng nhận xét của @ Matt như một câu trả lời để nó dễ thấy hơn

python -m IPython

Tải ipython dưới dạng mô-đun với bất kỳ python nào có thể truy cập được trên đường dẫn trước. Trong trường hợp của tôi, tôi đã cài đặt sẵn một cái và một cái tôi đã thêm từ bia. Điều này chỉ hoạt động hoàn hảo.


Có lẽ không phải là câu trả lời cho câu hỏi này nhưng đây là câu trả lời cho câu hỏi: "làm thế nào để chạy ipython với bất kỳ phiên bản python được cài đặt". Cảm ơn.
Salyangoz

9

Điều gì về việc sử dụng một virtualenv? Tôi thực sự thích nó. Có lẽ đó không phải là cách nhanh hơn, nhưng tôi nghĩ nó rất rõ ràng.

Khi bạn tạo một virtualenv, bạn có thể chỉ định đường dẫn python bằng cờ -p.

cho python 2.7

$ virtualenv -p /usr/bin/python2.7 venv2.7
$ source venv2.7/bin/activate
(venv2.7)$ pip install ipython
(venv2.7)$ ipython

cho python 3,4

$ virtualenv -p /usr/bin/python3.4 venv3.4
$ source venv3.4/bin/activate
(venv3.4)$ pip install ipython
(venv3.4)$ ipython

2
Đây là một chủ đề cũ, nhưng tôi cũng đã đi qua các virtualenv và thích chúng tốt để phát triển sản phẩm. Tuy nhiên, với mục đích phân tích "hàng ngày", tôi muốn chỉ có một phiên bản python / ipython có thể sử dụng thẳng trong hệ thống của mình.
Diego-MX

1
python -m IPythonsẽ bắt đầu ipython với phiên bản nhất định củapython
Xiao

1
lưu ý rằng python -m IPythoncần cài đặt này:pip install ipython
Xiao

6

Trước tiên, tôi sẽ đảm bảo rằng bạn đang sử dụng đúng python. Tại dấu nhắc lệnh, gõ:

which python
python -V

Đầu tiên sẽ cho bạn biết đường dẫn, thứ hai cho bạn biết phiên bản Python bạn đang sử dụng.


Được rồi, nó cung cấp cho tôi Python 2.7.2 trên / usr / local / bin / python
Diego-MX

4

Giải pháp của tôi rất đơn giản, ngu ngốc nhưng hiệu quả.

Tôi sử dụng python -Vđể đảm bảo phiên bản nào là

$ python -V
Python 2.7.10

và sau đó tạo bí danh trong .bash_profile

$ vi ~/.bash_profile

Thêm một dòng

alias ipython="python -m IPython"

sau đó bạn sẽ nhận được một ipython trong python 2.7. 🙂

(Nhân tiện, của tôi ipythonlà cài đặt qua homebrew, mặc định nó sẽ chạy ipython trong python 3.)

$ brew install ipython

2

cực kỳ phù hợp: http://conda.pydata.org/docs/troubleshooting.html#shell-command-location .

Các sự cố td; lr gặp phải do các biến 'băm' và đường dẫn của trình bao.


Một cách thực hành chung tốt là cài đặt ipython trong virtualenv. của bạn which pythonnên trỏ tới tệp nhị phân virtualenv python.
parsethis

Quá trình băm của shell đã cắn tôi, ngay cả sau khi cài đặt ipython bên trong virtualenv. hash -rsửa nó cho tôi; cảm ơn!
theY4Kman,

1

Một phương pháp tương tự sử dụng pyenv

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

Bây giờ nó sẽ hiển thị phiên bản chính xác của python

Python 3.4.5

1

Giải pháp đơn giản nhất tuyệt đối mà tôi có thể nghĩ ra, không yêu cầu phải loay hoay với môi trường, tệp đã cài đặt hoặc bất cứ thứ gì khác, dựa trên sự thật rằng

  1. Tập lệnh thực thi ipythonthực sự là một tập lệnh Python.
  2. Gói IPython được cài đặt riêng cho từng trình thông dịch mà bạn đã chạy pip intallcùng.

Nếu phiên bản Python mà bạn đang chạy có một gói IPython được cài đặt, bạn có thể thực hiện

/path/to/desired/python $(which ipython)

Điều này sẽ chạy ipythontập lệnh với trình thông dịch bạn muốn thay vì trình thông dịch được liệt kê trong shebang.


Thay vì mỗi lần gọi như trên, làm cách nào để đặt nó làm mặc định, để mỗi khi tôi nhập ipythonvào trình bao, nó sẽ tự động đọc trình thông dịch tùy chỉnh thay vì mặc định?
Srivatsan

Thêm một tập lệnh thực hiện điều đó vào đường dẫn trước mặc định. Nhưng bạn phải gây rối với môi trường để làm điều đó.
Mad Physicist,


0

Tôi đã gặp vấn đề tương tự nhưng sau đây là giải pháp duy nhất phù hợp với tôi trên OSX 12, Sierra.

ipython luôn khởi chạy cho python 3.6 nhưng tôi cần nó cho 2.7. Tôi không thể tìm thấy tập lệnh khởi động ipython cho 2.7, cũng như không thể tìm thấy mô-đun IPython để thực thi python -m. Không ai trong số brew instally ipython pip install ipythonhoặc pip2 install ipythoncó thể lấy cho tôi phiên bản 2.7. Vì vậy, tôi đã nhận nó theo cách thủ công.

brew install ipython@5cài đặt phiên bản 2.7 từ đây nhưng sẽ không đặt nó vào của bạn $PATHvì nó biết tên xung đột với gói khác. ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2sẽ sửa lỗi này và cho phép bạn chỉ cần chạy ipython2từ lời nhắc trình bao của bạn

Đối với tôi, bởi vì tôi nghiêm túc về việc sử dụng ipython cho 2.7, tôi cũng chạy các lệnh sau.

ln -s /usr/local/Cellar/ipython/6.2.1/bin/ipython /usr/local/bin/ipython3
rm -f /usr/local/bin/ipython
ln -s /usr/local/bin/ipython2 /usr/local/bin/ipython

0

Tất cả các câu trả lời được đề cập ở đây không giúp giải quyết vấn đề nếu bạn đang sử dụng anaconda hoặc một số trình bao bọc môi trường ảo khác.

Câu trả lời này dựa trên giả định rằng bạn đang sử dụng anaconda.

Giả sử bạn đang ở trong môi trường python 3 và khi tạo sổ ghi chép trên sổ ghi chép jupyter, nó hiển thị "Python 2" thay vì "Python 3".

Điều này là do "ipython" về cơ bản là một tập lệnh được chạy và trong tập lệnh này, nó đề cập đến phiên bản python nào mà nó đang sử dụng để thực thi lệnh. Tất cả những gì bạn cần làm là thay đổi dòng này cho ipython để sử dụng phiên bản python bạn muốn.

Trước tiên, hãy dừng máy chủ ipython và lấy vị trí của tệp thực thi python của môi trường hiện tại bằng cách sử dụng lệnh "which python"

Đầu ra của tôi là:

/home/sourabh/anaconda2/envs/py3/bin/python

Bây giờ lấy vị trí thực thi của ipython bằng cách sử dụng lệnh "which ipython"

của tôi là :

/home/sourabh/anaconda2/envs/py2/bin/python

Lưu ý rằng nó đang sử dụng một phiên bản khác của python tức là. python từ một môi trường cụ thể đang chạy một phiên bản khác của python tức là đang chạy python từ một môi trường khác.

Bây giờ điều hướng đến thư mục anaconda2 / bin (đối với người dùng anaconda 3, nó phải là anaconda3 / bin) và tìm kiếm tệp "ipython". trong phần chỉnh sửa này, dòng đầu tiên để trỏ nó đến phiên bản python hiện tại mà bạn muốn. tức là đầu ra của "con trăn nào" tức là:

#!/home/sourabh/anaconda2/envs/py3/bin/python

Lưu ý rằng tôi đã thay đổi môi trường python của mình từ py2 (chạy python 2.7) thành py3 (chạy python 3.5).

Lưu các tập tin. Và chạy sổ ghi chép jupyter, bây giờ khi tạo sổ ghi chép mới, tùy chọn "Python 3" sẽ hiển thị.

Chúc mừng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.