ipython อ่านเวอร์ชัน python ผิด


103

ฉันมีปัญหากับ Python, iPython และไลบรารี จุดต่อไปนี้แสดงห่วงโซ่ของปัญหา ฉันใช้ Python 2.7 บน Mac Lion

  1. iPython ไม่อ่านไลบรารีของ scipy, matplotlib แต่อ่านตัวเลข
  2. ในการแก้ไขปัญหานี้ฉันลองติดตั้งเวอร์ชันซอร์สโค้ดของ Python และทำให้ฉันมีปัญหามากขึ้นเท่านั้นตั้งแต่ตอนนี้ฉันมีสองเวอร์ชันที่แตกต่างกัน: 2.7.1 และ 2.7.2
  3. ฉันสังเกตเห็นว่าใช้ Python ใช้เวอร์ชัน 2.7.2 และนำเข้า scipy, matplotlib และ numpy แต่ใน iPython เวอร์ชันคือ 2.7.1 ซึ่งไม่เปิด scipy หรือ matplotlib

ฉันได้ลองหลายสิ่งที่ฉันพบจากบล็อกโพสต์อื่น ๆ แต่ไม่มีใครช่วยเลยและน่าเสียดายที่ฉันไม่รู้ว่าฉันกำลังทำอะไรกับบางคน ตัวอย่างเช่นฉันลองถอนการติดตั้งและติดตั้ง ipython ใหม่ด้วย easy_install และ pip ฉันยังลองติดตั้งทุกอย่างใหม่ผ่าน homebrew และแก้ไขเส้นทาง. bash_profile


6
ipythonสคริปต์ "ผูก" เพื่อเฉพาะรุ่นหลามมันถูกติดตั้งด้วย - มันจะไม่ได้โดยอัตโนมัติสลับกับสิ่งที่คุณติดตั้งที่ผ่านมา หากคุณติดตั้ง 2.7.1 เป็นครั้งแรกตามด้วย IPython จากนั้น 2.7.2 จากแหล่งที่มา IPython ของคุณจะใช้ 2.7.1 ต่อไป คุณจำเป็นต้องเลิกทำการปัดเป่าทั้งหมดของคุณกลับไปใช้ Python เวอร์ชันดั้งเดิมของคุณและดูว่าเหตุผลที่อยู่เบื้องหลังจุดที่ 1 คืออะไร อีกวิธีหนึ่งให้ติดตั้ง IPython ใหม่โดยใช้การติดตั้ง Python ใดก็ตามที่สามารถเข้าถึงไลบรารีที่คุณต้องการได้
มิลลิโมส

คุณช่วยให้เจาะจงมากขึ้นได้ไหม ... ขอบคุณ
Diego-MX

1
เจาะจงเกี่ยวกับส่วนใด การเริ่มต้น IPython ทำงานอย่างไรหรือจะทำให้ปัญหาหายไปได้อย่างไร
มิลลิโมส

1
โดยพื้นฐานแล้วเมื่อคุณติดตั้ง "โปรแกรม" ของ python เช่น IPython หรือแม้แต่ easy_install สคริปต์เริ่มต้นสำหรับโปรแกรมจะถูกตั้งค่าให้ใช้ไฟล์ปฏิบัติการ python ที่ติดตั้งด้วยเสมอ ดังนั้นหากคุณมี Python 2.7.1 โดยไม่มีไลบรารีของคุณแล้วติดตั้ง IPython ระบบจะติดตั้ง IPython "ลงใน" การติดตั้ง Python 2.7.1 และลิงก์ไปยังipythonไฟล์ปฏิบัติการจะถูกวางไว้บนเส้นทางของคุณ หากคุณติดตั้ง Python 2.7.2 จากซอร์สซึ่งเป็นสำเนาใหม่ของ Python ที่แยกจากกันซึ่งจะไม่อัปเกรด 2.7.1 ที่มีอยู่ซึ่งมี IPython อยู่ ดังนั้น IPython จะไม่เห็นสำเนา 2.7.2 หรือไลบรารีใด ๆ ในนั้น
มิลลิโมส

1
ห้องสมุดทำงานเหมือนกัน หากคุณติดตั้ง numpy เป็นต้นหลังจากติดตั้ง Python 2.7.2 จากซอร์สอาจมีการติดตั้งลงในไดเร็กทอรี 2.7.2 ซึ่งหมายความว่าเวอร์ชัน Python 2.7.1 จะไม่เห็นไลบรารีเหล่านั้นเลย เนื่องจาก IPython ถูกติดตั้งด้วย 2.7.1 จึงไม่สามารถมองเห็นไลบรารีเหล่านั้นได้เช่นกัน โดยทั่วไปคุณสามารถมีสำเนา Python ที่แยกจากกันอย่างสมบูรณ์ในระบบของคุณได้มากเท่าที่คุณต้องการ แต่อาจเป็นเรื่องยากที่จะติดตามว่าจะใช้เพื่ออะไร หากคุณไม่ทราบว่าคุณกำลังทำอะไรอยู่ควรเริ่มต้นด้วย Python เวอร์ชันในตัวและติดตั้งไลบรารีที่ขาดหายไปใหม่
มิลลิโมส

คำตอบ:


147

โอเคแก้ไขด่วน:

which python

ให้คุณ/usr/bin/pythonใช่ไหม? ทำ

which ipython

/usr/local/bin/ipythonและฉันเดิมพันที่จะ มาดูข้างในกัน:

แก้ไข 9/7/59 - ตอนนี้ไฟล์มีลักษณะดังนี้:

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())

และของฉันทำงานได้อย่างถูกต้องเช่นนี้ แต่สถานการณ์ของฉันไม่เหมือนกับ OP


คำตอบเดิม - 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 - เปิด/usr/local/bin/ipythonในตัวแก้ไขของคุณ (พร้อมสิทธิ์) และเปลี่ยนบรรทัดแรกเป็น

#!/usr/local/bin/python

บันทึกเริ่มต้น iPython ควรบอกว่ากำลังใช้เวอร์ชันที่คุณต้องการตอนนี้


41
มีข้อสงสัยpython -m IPythonเทียบเท่ากับipythonคาดว่าคุณจะใช้ Python ที่ถูกต้อง
Matt

2
อย่าลืมปิดเทอร์มินัลและเปิดใหม่ เนื่องจาก PATH ถูกแคชโดยเชลล์เพื่อประสิทธิภาพ นี่คือวิธีที่ฉันทำให้โซลูชันนี้ได้ผลสำหรับฉัน ดู: conda.pydata.org/docs/…
พาร์เซทนี้

@ แมท. ฉันยังมีประสบการณ์ กรณีของฉันคือ "python -m IPython" จะเรียกใช้เวอร์ชันที่ถูกต้องที่ฉันต้องการ แต่เพียงแค่ 'ipython' มันเริ่มต้นสำเนาที่ใช้ python2 ตัวเก่า ความลึกลับคือถ้าฉันทำ "ซึ่ง ipython" มันจะชี้ไปที่การคัดลอก Virtualenv โดยที่เนื้อหาไฟล์ python นั้นถูกต้อง
kawingkelvin

15

โพสต์ความคิดเห็นของ @ Matt เป็นคำตอบเพื่อให้มองเห็นได้ชัดเจนขึ้น

python -m IPython

โหลด ipython เป็นโมดูลพร้อมกับ python ใด ๆ ที่สามารถเข้าถึงได้บนพา ธ ก่อน ในกรณีของฉันฉันติดตั้งไว้ล่วงหน้าหนึ่งรายการและฉันเพิ่มจากการชง แค่นี้ก็ทำงานได้อย่างสมบูรณ์


อาจไม่ใช่คำตอบสำหรับคำถามนี้ แต่นี่คือคำตอบสำหรับคำถาม: "วิธีเรียกใช้ ipython โดยติดตั้งเวอร์ชัน python ไว้" ขอบคุณ.
Salyangoz

9

แล้วการใช้ Virtualenv ล่ะ? ฉันชอบมันมาก. อาจจะไม่ใช่วิธีที่เร็วกว่านี้ แต่ฉันคิดว่ามันชัดเจนมาก

เมื่อคุณสร้าง Virtualenv คุณสามารถระบุพา ธ python ด้วยแฟล็ก -p

สำหรับ python 2.7

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

สำหรับ 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
นี่เป็นกระทู้เก่า แต่ฉันได้พบกับผู้มีคุณธรรมและชอบที่จะพัฒนาผลิตภัณฑ์ อย่างไรก็ตามเพื่อจุดประสงค์ในการวิเคราะห์ "ทุกวัน" ฉันขอแค่มี python / ipython เวอร์ชันที่ใช้งานได้โดยตรงในระบบของฉัน
Diego-MX

1
python -m IPythonจะเริ่มต้น ipython ด้วยเวอร์ชันที่กำหนดpython
Xiao

1
โปรดทราบว่าpython -m IPythonจำเป็นต้องติดตั้งสิ่งนี้:pip install ipython
เสี่ยว

6

อันดับแรกฉันจะตรวจสอบให้แน่ใจว่าคุณใช้ python ที่ถูกต้อง ที่พรอมต์คำสั่งพิมพ์:

which python
python -V

อันแรกจะบอกเส้นทางส่วนที่สองจะบอกเวอร์ชัน Python ที่คุณใช้อยู่


โอเคมันให้ Python 2.7.2 บน / usr / local / bin / python
Diego-MX

4

วิธีแก้ของฉันง่ายโง่ แต่ได้ผล

ฉันใช้python -Vเพื่อให้แน่ใจว่าเป็นเวอร์ชันอะไร

$ python -V
Python 2.7.10

แล้วสร้างนามแฝงใน. bash_profile

$ vi ~/.bash_profile

เพิ่มบรรทัด

alias ipython="python -m IPython"

จากนั้นคุณจะได้รับipythonใน python 2.7 🙂

(โดยวิธีการที่ฉันipythonติดตั้งผ่านhomebrewค่าเริ่มต้นจะได้รับ ipython ทำงานใน python 3)

$ brew install ipython

2

ที่เกี่ยวข้องมาก: http://conda.pydata.org/docs/troubleshooting.html#shell-command-location

td; lr พบปัญหาเนื่องจากเชลล์ 'แฮช' และตัวแปรพา ธ


วิธีปฏิบัติที่ดีทั่วไปคือการติดตั้ง ipython ใน Virtualenv คุณwhich pythonควรชี้ไปที่ไบนารี Virtualenv python
parsethis

เชลล์แฮชบิตฉันแม้หลังจากติดตั้ง ipython ภายใน Virtualenv hash -rแก้ไขให้ฉัน; ขอบคุณ!
theY4Kman

1

วิธีการที่คล้ายกันโดยใช้pyenv

pyenv install 3.4.5
pyenv local 3.4.5
pip install ipython
ipython

ตอนนี้จะแสดงเวอร์ชันที่ถูกต้องของ python

Python 3.4.5

1

วิธีแก้ปัญหาที่ง่ายที่สุดที่ฉันคิดได้ซึ่งไม่จำเป็นต้องเล่นซอกับสภาพแวดล้อมไฟล์ที่ติดตั้งหรือสิ่งอื่นใดอาศัยข้อเท็จจริงที่ว่า

  1. ไฟล์ปฏิบัติการipythonเป็นสคริปต์ Python
  2. แพ็คเกจ IPython ได้รับการติดตั้งแยกกันสำหรับล่ามแต่ละตัวที่คุณpip intallใช้งาน

หากเวอร์ชันของ Python ที่คุณใช้งานอยู่มีแพ็คเกจ IPython ติดตั้งอยู่คุณสามารถทำได้

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

การดำเนินการนี้จะเรียกใช้ipythonสคริปต์ด้วยล่ามที่คุณต้องการแทนคำที่ระบุไว้ใน Shebang


แทนที่จะเรียกข้างบนทุกครั้งฉันจะตั้งค่าเป็นค่าเริ่มต้นได้อย่างไรเพื่อให้ทุกครั้งที่ฉันพิมพ์ipythonในเชลล์มันจะอ่านตัวแปลที่กำหนดเองโดยอัตโนมัติแทนค่าเริ่มต้น
Srivatsan

เพิ่มสคริปต์ที่ทำเช่นนั้นในเส้นทางก่อนค่าเริ่มต้น แต่คุณต้องยุ่งกับสภาพแวดล้อมเพื่อทำเช่นนั้น
Mad Physicist

0

ปัญหาของคุณคือการทำให้ ipython ใช้ python ที่ถูกต้อง

ดังนั้นการแก้ไขปัญหาคือทำให้ ipython ใช้ python ที่ถูกต้อง (ซึ่งมีไลบรารีเช่น scipy ติดตั้งอยู่)

ฉันได้เขียนวิธีแก้ปัญหาไว้ที่นี่:

วิธีทำให้ iPython ใช้ Python 2 แทน Python 3


0

ฉันเจอปัญหาเดียวกัน แต่ต่อไปนี้เป็นทางออกเดียวที่ใช้ได้ผลกับฉันใน OSX 12, Sierra

ipython เปิดตัวสำหรับ python 3.6 เสมอ แต่ฉันต้องการมันสำหรับ 2.7 ฉันไม่สามารถหาสคริปต์เริ่มต้น ipython 2.7 หรือสามารถฉันพบโมดูล IPython python -mในการดำเนินการกับ ไม่มีbrew instally ipython pip install ipythonหรือpip2 install ipythonสามารถหารุ่น 2.7 ให้ฉันได้ ดังนั้นฉันจึงได้รับมันด้วยตนเอง

brew install ipython@5ติดตั้งเวอร์ชัน 2.7 จากที่นี่แต่จะไม่ใส่ลงในของคุณ$PATHเนื่องจากทราบว่าชื่อขัดแย้งกับแพ็คเกจอื่น ln -s /usr/local/Cellar/ipython@5/5.5.0_1/bin/ipython /usr/local/bin/ipython2จะแก้ไขปัญหานี้และให้คุณเรียกใช้ipython2จากพรอมต์เชลล์ของคุณ

สำหรับฉันเพราะฉันจริงจังกับการใช้ ipython สำหรับ 2.7 ฉันจึงรันคำสั่งต่อไปนี้ด้วย

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

คำตอบทั้งหมดที่กล่าวถึงในที่นี้ไม่ได้ช่วยในการแก้ปัญหาหากคุณใช้อนาคอนดาหรือเครื่องห่อสภาพแวดล้อมเสมือนอื่น ๆ

คำตอบนี้มาจากสมมติฐานที่ว่าคุณกำลังใช้อนาคอนดา

สมมติว่าคุณอยู่ในสภาพแวดล้อม python 3 และเมื่อสร้างสมุดบันทึกบนสมุดบันทึก jupyter จะแสดง "Python 2" แทนที่จะเป็น "Python 3"

เนื่องจาก "ipython" เป็นสคริปต์ที่เรียกใช้เป็นหลักและในสคริปต์นี้จะกล่าวถึงเวอร์ชัน python ที่ใช้เพื่อดำเนินการคำสั่ง สิ่งที่คุณต้องทำคือเปลี่ยนบรรทัดนี้สำหรับ ipython เพื่อใช้เวอร์ชันของ python ที่คุณต้องการ

ขั้นแรกให้หยุดเซิร์ฟเวอร์ ipython และรับตำแหน่งของ python ที่เรียกใช้งานได้ของสภาพแวดล้อมปัจจุบันโดยใช้คำสั่ง "ซึ่ง python"

ผลลัพธ์ของฉันคือ:

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

ตอนนี้รับตำแหน่งปฏิบัติการของ ipython ใช้คำสั่ง "ซึ่ง ipython"

ของฉันคือ:

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

สังเกตว่ามันใช้ python ie เวอร์ชันอื่น python จากสภาพแวดล้อมเฉพาะที่เรียกใช้ python เวอร์ชันอื่นเช่นเรียกใช้ python จากสภาพแวดล้อมที่แตกต่างกัน

ตอนนี้ไปที่ไดเร็กทอรี anaconda2 / bin (สำหรับผู้ใช้ anaconda 3 ควรเป็น anaconda3 / bin) และค้นหาไฟล์ "ipython" ในการแก้ไขบรรทัดแรกนี้จะชี้ไปที่เวอร์ชัน python ปัจจุบันที่คุณต้องการ คือผลลัพธ์ของ "ซึ่ง python" เช่น:

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

สังเกตว่าฉันเปลี่ยนสภาพแวดล้อม python จาก py2 (เรียกใช้ python 2.7) เป็น py3 (เรียกใช้ python 3.5)

บันทึกไฟล์ และเรียกใช้สมุดบันทึก jupyter ตอนนี้เมื่อสร้างสมุดบันทึกใหม่ตัวเลือก "Python 3" ควรจะมองเห็นได้

ไชโย!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.