วิธีการเปลี่ยนล่ามไพ ธ อนที่ใช้โดย jedi-vim


10

ฉันมีAnaconda(รวมถึง python3.5.2), VIM(7.4) และJedi-VIMติดตั้งบนระบบของฉัน นอกจากนี้ยังมีการpythonติดตั้งบนระบบ linux โดยค่าเริ่มต้น

การเติมข้อความอัตโนมัติกำลังทำงานบนแพ็คเกจพื้นฐานอย่างน้อยที่สุด แต่สำหรับแพคเกจเช่นnumpy(ซึ่งรวมอยู่ในAnaconda) ความสมบูรณ์ไม่ทำงาน

โดยใช้คำสั่งต่อไปนี้ในVIM:

:py3 import sys; print(sys.path)

['/usr/lib/python35.zip', 
'/usr/lib/python3.5', 
'/usr/lib/python3.5/plat-x86_64-linux-gnu', 
'/usr/lib/python3.5/lib-dynload', 
'/usr/local/lib/python3.5/dist-packages', 
'/usr/lib/python3/dist-packages', 
'_vim_path_']

นี้แสดงให้เห็นว่าฉันที่ล่ามและแพคเกจไม่เคยถูกนำมาใช้Anaconda-pythonjedi-vim

$which python
/home/user1/anaconda3/bin/python

ฉันจะทำให้ jedi-vim ใช้เส้นทางของ anaconda python ในการรับแพ็คเกจเติมข้อความอัตโนมัติได้อย่างไร

คำตอบ:


8

ฉันสามารถแก้ไขได้ด้วยการjedi-vimระบุตำแหน่งของแพ็กเกจในanacondaโฟลเดอร์ของฉันโดยใช้$PYTHONPATHตัวแปรดังนี้

export PYTHONPATH=$PYTHONPATH:/home/user1/anaconda3/lib/python3.5/site-packages

ขอบคุณทุกคน!

หรือเพิ่มบรรทัดต่อไปนี้ใน ~ / .bash_profile

export PYTHONPATH=$PYTHONPATH:/home/user1/anaconda3/lib/python3.5/site-packages


ขอบคุณ! เพิ่มjedi-vim export PYTHONPATH="/home/user-name/anaconda3/lib/python3.5/site-packages":$PYTHONPATHของฉัน~/.zshrcให้ทำงานอย่างถูกต้องกับอนาคอนดา
joelostblom

5
คุณไม่ควรทำอย่างนั้น นั่นอาจนำไปสู่ ​​SEGFAULT มันอันตราย.
เดฟ Halter

@DaveHalter เมื่อคุณพูดว่าอาจนำไปสู่ ​​SEGFAULT คุณหมายถึงสิ่งที่เสนอในคำตอบหรือสิ่งที่ถูกเสนอในความคิดเห็นก่อนหน้า? นอกจากนี้คุณรู้หรือไม่ว่าเหตุใด SEGFAULT จึงอาจเกิดขึ้นได้
แจ็คคินเซล

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

4

คุณทำไม่ได้ :pythonและ:python3คำสั่งที่มักจะใช้ที่รวบรวมในล่าม หากคุณมี Vim เวอร์ชันล่าสุดด้วยpythonและ / หรือpython3โหลดแบบไดนามิก (ดู:h python-dynamic) คุณสามารถใช้pythondllและpythonthreedllโหลดล่ามที่แตกต่างกัน แต่การแทนที่ CPython โดย Anaconda คือ IMO เพื่อขอ segfaults (โดย Vim ยอมรับเลยนั่นคือ)


3

รุ่นเจได 2018+

คุณสามารถใช้:let jedi#force_py_version=3.8หากคุณต้องการเปลี่ยนเป็น Python เวอร์ชันล่าสุด น่าเสียดายที่ไม่มีรายชื่อสภาพแวดล้อมใน jedi-vim เราต้องสร้างมันขึ้นมา (มีให้ในเจไดด้วย)


คำตอบเก่า

โดยทั่วไปสิ่งเดียวที่คุณสามารถทำได้ในปัจจุบันคือการคอมไพล์ VIM ด้วยการสนับสนุน Python 3.5 นั่นอาจเป็นความคิดที่โง่ แต่ก็ใช้ได้

มิฉะนั้นจะมีการสนับสนุนสำหรับรุ่นข้ามหลามกับhttps://github.com/davidhalter/jedi/issues/385

โปรดทราบว่าอาจเป็นไปได้ในการปรับเปลี่ยนเส้นทาง Python แต่อาจนำไปสู่ ​​SEGFAULT และพฤติกรรมที่ไม่พึงประสงค์อื่น ๆ เพราะโดยทั่วไปแล้วคุณอนุญาตให้ Jedi เรียกใช้รหัสไบนารี่จาก Python เวอร์ชั่นอื่น (ใช่แล้วมันเกิดขึ้นจริง)


1

คุณสามารถคอมไพล์กลุ่มด้วย anaconda: ฉันทำได้./configure --with-features=huge --enable-pythoninterp --with-python-config-dir=~/anaconda/lib/python2.7/config/ฉันจำได้ว่าฉันทำการทดสอบที่คล้ายกันในภายหลังและ:py import sys; print sys.pathให้ผลลัพธ์ที่ถูกต้องกับฉัน

จากการค้นหาเว็บคุณอาจทำสิ่งนี้ (เช่นสำหรับ 3.4):

./configure --enable-python3interp --with-features=huge --with-python3-config-dir=~/anaconda/lib/python3.4/config-3.4m-x86_64-linux-gnu


1

เดวิดมีจุดที่ถูกต้องเกี่ยวกับการสอด Vim กับรสชาติของ Python ที่แตกต่างกันและหากการเข้ารหัสอย่างหนักPYTHONPATHกับ Anaconda Python ใน.profile/ .bashrcจริงๆจะนำไปสู่ ​​SEG 11 สามารถใช้นามแฝงของเชลล์ได้

alias vim3='PYTHONPATH=/usr/lib/Anaonda/.../site-packages vim'

บางทีการแก้ไขนี้จะเพียงพอ


1

ฉันใช้ 32 บิตเป็นกลุ่มสำหรับความเข้ากันได้กับส่วนขยายอื่น ๆ แต่ 64 บิตหลามเป็นครั้งแรกในเส้นทางของฉันด้วยเหตุผลอื่น ๆ ดังนั้นฉันจึงติดตั้งงูเหลือม 32 บิตโดยใช้ condaผ่าน:

set CONDA_FORCE_32BIT=1
conda create -n py27_32bit python=2.7
activate py27_32bit
pip install jedi
deactivate

และเพิ่มลงในของฉัน.vimrc:

if has('win32')&& isdirectory('C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/')
    let $PATH = 'C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/;
                \C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/lib/;' . $PATH
    let $PYTHONPATH = 'C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/;
                \C:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/DLLs/;
                \:/Users/USER/AppData/Local/Continuum/anaconda2/envs/py27_32bit/lib/;' 
endif 

C:/Users/USER/AppData/Local/Continuum/anaconda2ผลลัพธ์ของการโทรอยู่ที่ไหนconda info --base

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