อะไรคือสิ่งที่เทียบเท่ากับแพคเกจการติดตั้งแพคเกจ 'npm --save-dev`?


202

ใน nodejs ฉันสามารถทำได้npm install package --save-devเพื่อบันทึกแพ็คเกจที่ติดตั้งไว้ในแพ็คเกจ

ฉันจะทำสิ่งเดียวกันใน Python package manager ได้pipอย่างไร ผมอยากจะบันทึกชื่อแพคเกจและรุ่นของมันเข้าไปพูดเพียงหลังจากติดตั้งแพคเกจใช้สิ่งที่ต้องการrequirements.pippip install package --save-dev requirements.pip


4
pip freeze > requirements.pip
falsetru

5
สิ่งนี้ไม่เหมือนกัน npm install package --save-devรวมทั้งการติดตั้งและการรวมเข้ากับไฟล์ข้อกำหนด node_npm ในเวลาเดียวกัน มันมีประโยชน์มากกว่า ด้วยpip freezeฉันต้องทำสองคำสั่งเพื่อทำสิ่งเดียวกัน: 1) pip install package2)pip freeze > requirements.pip
hllau

1
Pip มีปัญหาเกี่ยวกับ--saveตัวเลือก
rutsky

หากใช้ setup.py สำหรับข้อกำหนดฉันได้สร้างโมดูลขนาดเล็กเพื่อตรึงเวอร์ชันแพ็คเกจของคุณลงใน setup.py
AdamGold

คำตอบ:


166

pipที่มีอยู่ไม่เทียบเท่ากับ

วิธีที่ดีที่สุดคือ pip install package && pip freeze > requirements.txt

คุณสามารถดูตัวเลือกทั้งหมดที่มีอยู่บนหน้าเอกสาร

หากมันรบกวนจิตใจคุณจริงๆมันคงไม่ยากเกินไปที่จะเขียนสคริปต์ทุบตีที่กำหนดเอง ( pips) ที่รับการ-sโต้แย้งและค้างไว้ที่requirements.txtไฟล์ของคุณโดยอัตโนมัติ

แก้ไข 1

นับตั้งแต่เขียนสิ่งนี้ไม่มีการเปลี่ยนแปลงในการให้--save-devตัวเลือกอัตโนมัติคล้ายกับ NPM แต่ Kenneth Reitz (ผู้เขียนrequestsและอีกมากมาย) ได้เผยแพร่ข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนการทำงาน pipที่ดีขึ้นเพื่อจัดการกับpipการปรับปรุงที่ดีขึ้น

แก้ไข 2

เชื่อมโยงจากบทความ "pip ดีขึ้นเวิร์กโฟลว์" ข้างต้นตอนนี้ขอแนะนำให้ใช้pipenvในการจัดการความต้องการและสภาพแวดล้อมเสมือน เมื่อเร็ว ๆ นี้ฉันใช้มันมากฉันอยากจะสรุปว่าการเปลี่ยนแปลงง่าย ๆ เพียงใด:

ติดตั้งpipenv(บน Mac)

brew install pipenv

pipenvสร้างและจัดการสภาพแวดล้อมเสมือนของตัวเองดังนั้นในโครงการที่มีอยู่requirements.txtแล้วติดตั้งข้อกำหนดทั้งหมด (ฉันใช้ Python3.7 แต่คุณสามารถลบ--threeหากคุณไม่ทำ) นั้นทำได้ง่ายเพียง:

pipenv --three install

การเปิดใช้งาน virtualenv เพื่อเรียกใช้คำสั่งนั้นทำได้ง่ายเช่นกัน

pipenv shell

ข้อกำหนดการติดตั้งจะอัปเดตPipfileและPipfile.lock

pipenv install <package>

นอกจากนี้ยังเป็นไปได้ที่จะอัปเดตแพ็กเกจที่ล้าสมัย

pipenv update

ฉันขอแนะนำให้ตรวจสอบโดยเฉพาะอย่างยิ่งถ้ามาจากnpmพื้นหลังเนื่องจากมีความรู้สึกคล้ายกับpackage.jsonและpackage-lock.json


22
โปรดทราบว่านี่จะเป็นการบันทึกการพึ่งพาของการอ้างอิงที่อาจไม่จำเป็นเมื่อเวลาผ่านไปอีกต่อไปเพราะการพึ่งพานั้นทำให้การใช้งานลดลง
Patrick Bassut

สิ่งนี้ดูเหมือนจะไม่ได้ตอบคำถามแบบเดิม - ซึ่งช่วยให้คุณมีการพึ่งพาที่แตกต่างกันสำหรับการพัฒนาท้องถิ่นและการผลิต คุณจะประสบความสำเร็จได้อย่างไรด้วย pipenv
jeznag

1
@jeznag pipenvช่วยให้คุณสามารถระบุdev-packagesในPipfileและ / หรือใช้--dev(หรือ-d) จากบรรทัดคำสั่ง เช่นpipenv install --dev nose2
Ewan

40

เส้นเรียบง่ายนี้เป็นจุดเริ่มต้น คุณสามารถสร้างคำสั่ง bash เพื่อนำ PACKAGE กลับมาใช้ใหม่ได้อย่างง่ายดาย

pip install PACKAGE && pip freeze | grep PACKAGE >> requirements.txt

ขอบคุณ @devsnd สำหรับตัวอย่างฟังก์ชัน bash ที่เรียบง่าย:

function pip-install-save { 
    pip install $1 && pip freeze | grep $1 >> requirements.txt
}

หากต้องการใช้งานเพียงแค่เรียกใช้:

pip-install-save some-package

ห้าเซ็นต์ของฉันP=Flask pip install $P && pip freeze | grep $P >> requirements.txt
GBrian

4

ฉันได้สร้างแพคเกจหลามที่ล้อมรอบที่เกิดขึ้นจริงpipที่เรียกว่าpipm pipคำสั่งทั้งหมดจะทำงานตามที่เป็นอยู่และจะปรากฏในไฟล์ข้อกำหนด แตกต่างจากpip-save(เครื่องมือที่คล้ายกันที่ฉันพบและไม่สามารถใช้งานได้) มันสามารถจัดการไฟล์และสภาพแวดล้อมจำนวนมาก (ทดสอบ, dev, การผลิต ฯลฯ ) นอกจากนี้ยังมีคำสั่งให้อัพเกรดทั้งหมด / การอ้างอิงใด ๆ ของคุณ

การติดตั้ง

pipm install pkg-name

การติดตั้งเป็นการพึ่งพาการพัฒนา

pipm install pkg-name --dev

การติดตั้งเป็นการทดสอบการพึ่งพา

pipm install pkg-name --test

การถอด

pipm uninstall pkg-name

อัปเดตการอ้างอิงทั้งหมดของคุณ

pipm update

ติดตั้งการอ้างอิงทั้งหมดของคุณจากไฟล์ข้อกำหนด

pipm install

รวมถึงการพึ่งพาการพัฒนา

pipm install --dev


3

อัปเดต:เห็นได้ชัดว่าpipenv ไม่ได้รับการรับรองอย่างเป็นทางการจากผู้ดูแล Pythonและหน้าที่เชื่อมโยงก่อนหน้านี้เป็นขององค์กรอื่น เครื่องมือมีข้อดีข้อเสีย แต่วิธีการแก้ปัญหาด้านล่างยังคงได้ผลลัพธ์ที่ OP ต้องการ

pipenvเป็นเครื่องมือการจัดการการพึ่งพาที่ล้อมรอบpipและเหนือสิ่งอื่นใดให้สิ่งที่คุณถาม:

https://pipenv.kennethreitz.org/en/latest/#example-pipenv-workflow

$ pipenv install <package>

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

Pipfileเป็นเทียบเท่าโดยตรงpackage.jsonในขณะที่สอดคล้องกับPipfile.lockpackage-lock.json


2

ฉันทำการแฮ็คด่วนpipเพื่อเพิ่ม--saveตัวเลือกในการติดตั้ง / ถอนการติดตั้งคำสั่ง

โปรดดูบล็อกของฉันสำหรับข้อมูลเพิ่มเติมเกี่ยวกับแฮ็คนี้: http://blog.abhiomkar.in/2015/11/12/pip-save-npm-like-behaviour-to-pip/

การติดตั้ง (GitHub): https://github.com/abhiomkar/pip-save

หวังว่านี่จะช่วยได้


1

คุณสามารถบันทึกด้วยตนเองใน Makefile (หรือไฟล์ข้อความแล้วนำเข้าใน Makefile ของคุณ):


PYTHON=.venv/bin/python # path to pyphon
PIP=.venv/bin/pip # path to pip
SOURCE_VENV=. .venv/bin/activate


install:
    virtualenv .venv
    $(SOURCE_VENV) && $(PIP) install -e PACKAGE
    $(SOURCE_VENV) && $(PIP) install -r requirements.txt # other required packages

จากนั้นก็วิ่ง make install


ฉันเห็นด้วยกับวิธีการนี้โดยสิ้นเชิง
eleijonmarck

1

ฉันใช้บรรทัดคำสั่งขนาดเล็กนี้เพื่อติดตั้งแพคเกจและบันทึกรุ่นในrequirements.txt: pkg=package && pip install $pkg && echo $(pip freeze | grep -i $pkg) >> requirements.txt


0

ทำเชลล์ฟังก์ชั่นเพื่อทำสิ่งนี้ได้อย่างไร เพิ่มรหัสด้านล่างให้กับคุณ~/.profileหรือ~/.bashrc

pips() {
    local pkg=$1

    if [ -z "$1" ]; then
        echo "usage: pips <pkg name>"
        return 1
    fi

    local _ins="pip install $pkg"
    eval $_ins
    pip freeze | grep $pkg -i >> requirements.txt
}

จากนั้นเรียกใช้source ~/.profileหรือsource ~/.bashrcเพื่อนำเข้าไปยังเทอร์มินัลปัจจุบันของคุณ

เมื่อคุณต้องการติดตั้ง && pips requestsประหยัดแพคเกจให้เรียกใช้เพียงแค่ยกตัวอย่างเช่น หลังจากติดตั้งแพ็คเกจแล้วเวอร์ชั่นจะถูกบันทึกลงrequirements.txtในไดเรกทอรีปัจจุบันของคุณ

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