คำตอบสั้น ๆrequirements.txt
คือใช้สำหรับแสดงรายการข้อกำหนดของแพ็คเกจเท่านั้น setup.py
ในทางกลับกันก็เหมือนกับสคริปต์การติดตั้ง หากคุณไม่ได้วางแผนที่จะติดตั้งรหัส python โดยทั่วไปคุณจะต้องใช้เพียงrequirements.txt
หากคุณไม่ได้วางแผนในการติดตั้งรหัสหลามโดยทั่วไปแล้วคุณจะต้องการเพียง
ไฟล์ setup.py
อธิบายนอกเหนือจากการขึ้นต่อกันของแพ็กเกจชุดของไฟล์และโมดูลที่ควรแพ็กเกจ (หรือคอมไพล์ในกรณีของโมดูลเนทีฟ (เช่นเขียนด้วย C)) และข้อมูลเมตาที่จะเพิ่มลงในรายการแพ็คเกจ python ( เช่นชื่อแพ็กเกจเวอร์ชันแพ็กเกจคำอธิบายแพ็คเกจผู้เขียน ... )
เนื่องจากไฟล์ทั้งสองแสดงรายการการอ้างอิงจึงอาจนำไปสู่การทำซ้ำเล็กน้อย อ่านรายละเอียดด้านล่าง
Requirement.txt
ไฟล์นี้แสดงข้อกำหนดแพคเกจ python เป็นไฟล์ข้อความธรรมดา (เป็นทางเลือกพร้อมกับความคิดเห็น) ที่แสดงรายการการอ้างอิงแพ็กเกจของโครงการ python ของคุณ (หนึ่งรายการต่อบรรทัด) มันไม่ได้อธิบายวิธีการที่แพคเกจหลามของคุณมีการติดตั้ง โดยทั่วไปคุณจะใช้ไฟล์ข้อกำหนดด้วยไฟล์pip install -r requirements.txt
.
ชื่อไฟล์ของไฟล์ข้อความเป็นไปตามอำเภอใจ แต่มักจะเป็นไปrequirements.txt
ตามแบบแผน เมื่อสำรวจเก็บซอร์สโค้ดของแพคเกจหลามอื่น ๆ ที่คุณอาจจะสะดุดกับชื่ออื่น ๆ เช่นหรือdev-dependencies.txt
dependencies-dev.txt
สิ่งเหล่านี้มีจุดประสงค์เดียวกับdependencies.txt
แต่โดยทั่วไปจะแสดงรายการอ้างอิงเพิ่มเติมที่น่าสนใจสำหรับนักพัฒนาของแพ็คเกจเฉพาะกล่าวคือสำหรับการทดสอบซอร์สโค้ด (เช่น pytest, pylint ฯลฯ ) ก่อนวางจำหน่าย โดยทั่วไปแล้วผู้ใช้แพ็กเกจจะไม่ต้องการการอ้างอิงของนักพัฒนาทั้งชุดเพื่อเรียกใช้แพ็กเกจ
หากมีrequirements-X.txt
ตัวแปรหลายตัวโดยปกติแล้วตัวแปรหนึ่งจะแสดงรายการการอ้างอิงรันไทม์และเวลาสร้างหรือทดสอบการอ้างอิงอื่น ๆ บางโปรเจ็กต์ยังจัดเรียงไฟล์ข้อกำหนดไว้ด้วยเช่นเมื่อไฟล์ข้อกำหนดหนึ่งไฟล์มีไฟล์อื่น ( ตัวอย่าง ) การทำเช่นนี้สามารถลดการทำซ้ำได้
setup.py
นี่คือสคริปต์ python ที่ใช้setuptools
โมดูลเพื่อกำหนดแพ็คเกจ python (ชื่อไฟล์ที่รวมข้อมูลเมตาของแพ็กเกจและการติดตั้ง) มันจะrequirements.txt
แสดงรายการการอ้างอิงรันไทม์ของแพ็คเกจด้วยเช่นกัน Setuptools เป็นวิธีการสร้างและติดตั้งแพคเกจ python โดยพฤตินัย แต่มีข้อบกพร่องซึ่งเมื่อเวลาผ่านไปได้ขยายการพัฒนา "meta-package manager" ใหม่เช่น pip ตัวอย่างข้อบกพร่องของ setuptools คือไม่สามารถติดตั้งแพ็กเกจเดียวกันหลายเวอร์ชันและไม่มีคำสั่งถอนการติดตั้ง
เมื่อผู้ใช้ python ทำpip install ./pkgdir_my_module
(หรือpip install my-module
) pip จะทำงานsetup.py
ในไดเร็กทอรี (หรือโมดูล) ที่กำหนด ในทำนองเดียวกันโมดูลใด ๆ ที่setup.py
สามารถpip
ติดตั้งได้เช่นโดยเรียกใช้pip install .
จากโฟลเดอร์เดียวกัน
ฉันต้องการทั้งสองอย่างจริงๆหรือ
คำตอบสั้น ๆ คือไม่ แต่เป็นเรื่องดีที่มีทั้งสองอย่าง พวกเขาบรรลุวัตถุประสงค์ที่แตกต่างกัน แต่สามารถใช้ทั้งสองเพื่อแสดงรายการการอ้างอิงของคุณ
มีอยู่คนหนึ่งเคล็ดลับที่คุณอาจพิจารณาที่จะหลีกเลี่ยงการทำซ้ำรายชื่อของการพึ่งพาระหว่างเป็นและrequirements.txt
setup.py
หากคุณได้เขียนsetup.py
แพคเกจที่ใช้งานได้อย่างสมบูรณ์แล้วและการอ้างอิงของคุณส่วนใหญ่เป็นภายนอกคุณสามารถพิจารณาง่ายๆrequirements.txt
โดยมีเพียงสิ่งต่อไปนี้:
-e .
-e
เป็นพิเศษpip install
ตัวเลือกที่ติดตั้งแพคเกจที่กำหนดในการแก้ไขโหมด เมื่อpip -r requirements.txt
เรียกใช้ไฟล์นี้ pip จะติดตั้งการอ้างอิงของคุณผ่านทางรายการใน./setup.py
. ตัวเลือกที่แก้ไขได้จะวาง symlink ในไดเร็กทอรีการติดตั้งของคุณ (แทนที่จะเป็น egg หรือสำเนาที่เก็บถาวร) ช่วยให้นักพัฒนาสามารถแก้ไขโค้ดจากที่เก็บได้โดยไม่ต้องติดตั้งใหม่
คุณยังสามารถใช้ประโยชน์จากสิ่งที่เรียกว่า "setuptools extras" เมื่อคุณมีทั้งสองไฟล์ในที่เก็บแพ็กเกจของคุณ คุณสามารถกำหนดแพ็คเกจเสริมใน setup.py ภายใต้หมวดหมู่ที่กำหนดเองและติดตั้งแพ็คเกจเหล่านั้นจากหมวดหมู่นั้นด้วย pip:
from setuptools import setup
setup(
name="FOO"
...
extras_require = {
'dev': ['pylint'],
'build': ['requests']
}
...
)
จากนั้นในไฟล์ข้อกำหนด:
-e path/to/mypkg[build]
สิ่งนี้จะเก็บรายการอ้างอิงทั้งหมดของคุณไว้ใน setup.py
หมายเหตุ : คุณตามปกติจะดำเนินการ pip และ setup.py จาก Sandbox virtualenv
เช่นผู้ที่สร้างขึ้นด้วยโปรแกรม วิธีนี้จะหลีกเลี่ยงการติดตั้งแพ็คเกจ python นอกบริบทของสภาพแวดล้อมการพัฒนาโครงการของคุณ