Python เทียบเท่ากับกล่อง Bundler / Perl ของ Ruby คืออะไร?


94

ฉันรู้เกี่ยวกับ Virtualenv และ pip แต่สิ่งเหล่านี้แตกต่างจาก Bundler / carton เล็กน้อย

ตัวอย่างเช่น:

  • pip เขียนพา ธ สัมบูรณ์ไปยัง shebang หรือเปิดใช้งานสคริปต์
  • pip ไม่มีexecคำสั่งย่อย ( bundle exec bar)
  • Virtualenv คัดลอก Python interpreter ไปยัง Local Directory

นักพัฒนา Python ทุกคนใช้ Virtualenv / pip หรือไม่? มีเครื่องมือจัดการแพ็คเกจอื่น ๆ สำหรับ Python หรือไม่?


4
ไม่ไม่ใช่ผู้ใช้ Python ทุกคนจะใช้ Virtualenv ฉันไม่เคยต้องการมันเป็นการส่วนตัว
Fred Foo

ฉันไม่ทราบว่ามีบางอย่างเหมือนกับ Ruby Bundler (ซึ่งจนถึงตอนนี้ฉันไม่รู้ BTW) สิ่งที่ผมใช้ในการทำคือการใช้ทั้ง virtualenv และ pip และ setuptools - หรือ distutils หรืออะไรก็ตามที่ระบบการกระจายผมพบครั้งแรกใน Google :) ผมอยากรู้เกี่ยวกับคำตอบเช่นกัน แต่นี้เป็นวิธีการแก้ปัญหาของฉันมากที่สุดของเวลา
brandizzi

pipenvและshovelด้านล่างนี้เป็นทางเลือกที่ทันสมัยกว่าเนื่องจากคำถามนี้ถูกถาม
Jim Meyer

ทั้ง pipenv และพลั่วไม่เทียบเท่ากัน พลั่วไม่มีอะไรเหมือนกับบันเดิลเลอร์เหมือนคราด การจัดการการพึ่งพา Python นั้นค่อนข้างล้าหลัง มันจะรวมกันเป็น pip ในวันเดียว ( pypi.org/project/pipfile ) …
Nomas Prime

คำตอบ:


72

จากสิ่งที่ฉันได้อ่านเกี่ยวกับบันเลอร์ - pip ที่ไม่มี Virtualenv น่าจะใช้ได้ดีสำหรับคุณ คุณสามารถคิดว่ามันเป็นอะไรบางอย่างระหว่างคำสั่ง gem ปกติและบันเดิลเลอร์ สิ่งทั่วไปที่คุณสามารถทำได้กับ pip:

  1. การติดตั้งแพ็คเกจ (การติดตั้งอัญมณี)

    pip install mypackage
    
  2. การพึ่งพาและการติดตั้งจำนวนมาก (gemfile)

    อาจเป็นวิธีที่ง่ายที่สุดคือใช้ไฟล์ requirements.txt ของ pip โดยพื้นฐานแล้วมันเป็นเพียงรายการธรรมดาของแพ็คเกจที่จำเป็นพร้อมข้อ จำกัด ของเวอร์ชัน อาจมีลักษณะดังนี้:

    nose==1.1.2
    django<1.3
    PIL
    

    ในภายหลังเมื่อคุณต้องการติดตั้งการอ้างอิงเหล่านั้นคุณจะต้องทำ:

    $ pip install -r requirements.txt
    

    วิธีง่ายๆในการดูแพ็คเกจปัจจุบันของคุณทั้งหมดในไวยากรณ์ไฟล์ความต้องการคือทำ:

    $ pip freeze
    

    คุณสามารถอ่านเพิ่มเติมได้ที่นี่

  3. การดำเนินการ (Bundler exec)

    แพคเกจ python ทั้งหมดที่มาพร้อมกับไฟล์ปฏิบัติการมักจะพร้อมใช้งานโดยตรงหลังจากติดตั้ง (เว้นแต่คุณจะมีการตั้งค่าแบบกำหนดเองหรือเป็นแพ็คเกจพิเศษ) ตัวอย่างเช่น:

    $ pip install gunicorn
    $ gunicorn -h 
    
  4. แพ็กเกจอัญมณีสำหรับติดตั้งจากแคช (แพ็คเกจบันเดิล)

    มีpip bundleและpip zip/unzip. แต่ฉันไม่แน่ใจว่ามีคนใช้เยอะหรือเปล่า

psหากคุณสนใจเกี่ยวกับการแยกสภาพแวดล้อมคุณสามารถใช้ Virtualenv ร่วมกับ pip ได้ (พวกเขาเป็นเพื่อนสนิทและทำงานร่วมกันได้อย่างสมบูรณ์แบบ) โดยดีฟอลต์ pip จะติดตั้งแพ็กเกจทั้งระบบซึ่งอาจต้องการสิทธิ์ของผู้ดูแลระบบ


46
สิ่งที่ดีเกี่ยว Bundler เป็นสิ่งที่virtualenvส่วนหนึ่งถูกนำมารวมและในกรณีส่วนใหญ่ไม่มีสิทธิผู้ดูแลระบบจะต้อง ในความเป็นจริง Bundle อาจเป็นอัญมณีชนิดเดียวที่ทั่วโลกต้องการ bundle install --path vendorติดตั้งทุกอย่างในเครื่องและbundle execฉลาดพอที่จะคิดออก ไม่จำเป็นต้องมีการเปลี่ยนแปลงสภาพแวดล้อมอย่างชัดเจน
Debilski

11
ฉันไม่คิดว่าข้อ 3 ถูกต้อง เพียงแค่เรียกใช้ไฟล์ปฏิบัติการ Ruby สามารถทำได้โดยมีหรือไม่มีbundle execก็ได้ จุดรวมของbundle execมันคือการเปลี่ยนแปลงสภาพแวดล้อมตามGemfileก่อนที่จะเรียกใช้ปฏิบัติการ Pip ไม่มีทางเทียบเท่ากับbundle execแม้ว่า Virtualenv อาจ
Sean Mackesey

@SeanMackesey เมื่อใดก็ตามที่คุณเปิดใช้งานสภาพแวดล้อม Virtualenv คุณจะเข้าไปอยู่ในสภาพแวดล้อมทันทีเช่น python ชี้ไปที่หนึ่งใน env ไม่ใช่ที่ติดตั้งทั่วโลก pythonpath ถูกต้องเมื่อเทียบกับ env แอปทั้งหมดจะทำงานจาก env นั้นด้วย
Denys Shabalin

8
สิ่งสำคัญเกี่ยวกับบันเดิลเลอร์คือมันเป็นมาตรฐาน defacto ในตอนนี้คุณสามารถรับประกันได้อย่างมากว่าโปรเจ็กต์ทับทิมแทบทุกขนาดจะมีรูทGemfileอยู่ในนั้นและคุณทำได้bundle installและคุณก็พร้อมที่จะไปหรือbundle --deploymentและมัน ' เพียงแค่ทำงานบนเซิร์ฟเวอร์โดยมีสิ่งอื่นให้ทำเล็กน้อยโดยให้เครื่องมีทับทิมเวอร์ชันที่ต้องการ Python ไม่มีทางเทียบเท่า เครื่องมืออยู่ที่นั่นความแพร่หลายทางวัฒนธรรมไม่ใช่
ocodo

17

คุณสามารถใช้pipenvซึ่งมีอินเทอร์เฟซที่คล้ายกันกับบันเดิลเลอร์

$ pip install pipenv

Pipenv สร้าง virtualenv โดยอัตโนมัติและติดตั้งการอ้างอิงจากหรือPipfilePipfile.lock

$ pipenv --three           # Create virtualenv with Python3
$ pipenv install           # Install dependencies from Pipfile
$ pipenv install requests  # Install `requests` and update Pipfile
$ pipenv lock              # Generate `Pipfile.lock`
$ pipenv shell             # Run shell with virtualenv activated

คุณสามารถเรียกใช้คำสั่งด้วยขอบเขต Virtualenv เช่นbundle exec.

$ pipenv run python3 -c "print('hello!')"

3

มีนักสะสมโคลน pbundler

เวอร์ชันที่อยู่ใน pip ในปัจจุบันจะอ่านrequirements.txtไฟล์ที่คุณมีอยู่แล้ว แต่ล้าสมัยไปมาก นอกจากนี้ยังไม่เทียบเท่าโดยสิ้นเชิง: ยืนยันที่จะสร้างไฟล์virtualenv . ฉันสังเกตเห็น Bundler ติดตั้งเฉพาะแพ็คเกจที่ขาดหายไปและให้ตัวเลือกในการให้รหัสผ่าน sudo ของคุณเพื่อติดตั้งลงในระบบของคุณหรือเริ่มต้นใหม่ซึ่งดูเหมือนจะไม่ใช่คุณสมบัติของ pbundler

อย่างไรก็ตามเวอร์ชันบน git เป็นการเขียนซ้ำเกือบทั้งหมดเพื่อให้ใกล้เคียงกับพฤติกรรมของ Bundler มากขึ้น ... รวมถึงการมี "Cheesefile" และตอนนี้ยังไม่รองรับ requirements.txt นี้จะโชคร้ายตั้งแต่ requirements.txt เป็นมาตรฐานพฤตินัยใน pythonland และมีการทำงานอย่างเป็นทางการแม้ BDFL ประทับเพื่อสร้างมาตรฐานมัน เมื่อมีผลใช้บังคับคุณสามารถมั่นใจได้ว่าบางอย่างเช่น pbundler จะกลายเป็นมาตรฐานโดยพฤตินัย อนิจจาไม่มีอะไรค่อนข้างมั่นคงที่ฉันรู้ (แต่ฉันชอบที่จะถูกพิสูจน์ว่าผิด)


โครงการนี้ดูเหมือนจะหายไป พิจารณาบทกวี: stackoverflow.com/a/61771381/115075
bb

1

ผมเขียนหนึ่ง - https://github.com/Deepwalker/pundler บน PIP มีการpundleใช้ชื่อแล้ว

ใช้requirements(_\w+)?.txtไฟล์เป็นข้อมูลอ้างอิงที่คุณต้องการและสร้างfrozen(_\w+)?.txtไฟล์ด้วยเวอร์ชันที่ถูกตรึง

เกี่ยวกับ(_\w+)?สิ่ง - นี่คือ envs คุณสามารถสร้าง requirements_test.txt จากนั้นใช้PUNDLEENV=testเพื่อใช้ deps นี้ในการวิ่งของคุณโดยมีรายการ requirements.txt ควบคู่ไปด้วย

และเกี่ยวกับ Virtualenv - คุณไม่จำเป็นต้องมีมันเป็นสิ่งที่ pundle ใช้จากบันเดิลในหัวแรก


1

Python Poetry เป็นชุดที่ใกล้เคียงที่สุดกับ Ruby Bundler ในปี 2020 (และตั้งแต่ปี 2018) อายุมากกว่าสองปีแล้วยังคงใช้งานได้ดีมีเอกสารที่ดีเยี่ยม อาจมีคนบ่นว่าcurl-pipe-python-style เป็นวิธีที่แนะนำในการติดตั้ง แต่มีทางเลือกอื่นเช่น homebrew บน macOS

มันใช้ Virtualenvs เบื้องหลัง (ตรงกันข้ามกับ Bundler) แต่ให้และใช้ไฟล์ล็อคดูแลการอ้างอิงย่อยปฏิบัติตามข้อ จำกัด ของเวอร์ชันที่ระบุและอนุญาตให้อัปเดตแพ็คเกจที่ล้าสมัยโดยอัตโนมัติ แม้กระทั่งการเติมข้อความอัตโนมัติสำหรับเชลล์ที่คุณชื่นชอบ

ด้วยการใช้ไฟล์ pyproject.toml มันยังไปได้ไกลกว่าบันเดิลเลอร์เล็กน้อย (ใกล้เคียงกับ gemspec นอกจากนี้ยังเทียบได้กับ npm และเส้นด้ายของ JavaScript และ TypeScript)

Poetrify (โครงการเสริม) ช่วยแปลงโครงการจาก requirements.txt เป็น pyproject.toml สำหรับบทกวี

ไฟล์ล็อคสามารถส่งออกไปยัง requirements.txt ได้poetry export -f requirements.txt > requirements.txtหากคุณต้องการสิ่งนั้นสำหรับเครื่องมืออื่น ๆ (หรือในกรณีที่ไม่น่าจะต้องการย้อนกลับ)


1

ฉันจะบอกว่าShovelน่าดู ได้รับการพัฒนาโดยเฉพาะสำหรับ Rake เวอร์ชัน Pythonish ไม่มีกิจกรรมผูกมัดมากมายในโครงการ แต่ดูเหมือนมั่นคงและมีประโยชน์


0

ไม่นักพัฒนาทุกคนไม่ใช้ Virtualenv และ / หรือ pip แต่นักพัฒนาหลายคนใช้ / ชอบเครื่องมือเหล่านี้

และตอนนี้สำหรับเครื่องมือพัฒนาแพ็คเกจและสภาพแวดล้อมที่แตกต่างกันซึ่งเป็นคำถามที่แท้จริงของคุณ มีเครื่องมืออื่น ๆ เช่น Buildout ( http://www.buildout.org/en/latest/ ) เพื่อจุดประสงค์เดียวกันแยกระบบสร้าง Python สำหรับทุกโครงการที่คุณจัดการ บางครั้งฉันใช้สิ่งนี้ แต่ไม่ใช่ตอนนี้

สภาพแวดล้อมอิสระต่อโปรเจ็กต์ใน Python นั้นแตกต่างกันเล็กน้อยกับสถานการณ์เดียวกันใน Ruby ในกรณีของฉันฉันใช้ pyenv ( https://github.com/yyuu/pyenv ) ซึ่งคล้าย rbenv แต่สำหรับ Python python และ Virtualenvs เวอร์ชันที่แตกต่างกันต่อโปรเจ็กต์และในสภาพแวดล้อมที่แยกได้นี้ฉันสามารถใช้ pip หรือติดตั้งง่าย (ถ้าจำเป็น)

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