เนื่องจากยังไม่มีใครครอบคลุมคำถามของ OP นี้:
สิ่งที่ฉันต้องการจะทำ:
ทำให้โมดูล python สามารถติดตั้งได้ด้วย "pip install ... "
นี่คือตัวอย่างที่น้อยที่สุดแน่นอนแสดงขั้นตอนพื้นฐานของการเตรียมความพร้อมและการอัปโหลดแพคเกจของคุณเพื่อ PyPI ใช้และsetuptools
twine
นี่ไม่ใช่วิธีที่ใช้แทนการอ่านบทช่วยสอนอย่างน้อยก็มีมากกว่าที่ครอบคลุมในตัวอย่างพื้นฐานนี้
การสร้างแพ็กเกจนั้นถูกครอบคลุมโดยคำตอบอื่น ๆ ที่นี่ดังนั้นให้เราคิดว่าเรามีขั้นตอนที่ครอบคลุมและโครงสร้างโครงการของเราดังนี้:
.
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
เพื่อที่จะใช้ setuptools
สำหรับบรรจุภัณฑ์เราจำเป็นต้องเพิ่มไฟล์setup.py
เข้าไปในโฟลเดอร์รากของโครงการของเรา:
.
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
อย่างน้อยที่สุดเราระบุข้อมูลเมตาสำหรับแพ็คเกจของเราเราsetup.py
จะมีลักษณะดังนี้:
from setuptools import setup
setup(
name='hellostackoverflow',
version='0.0.1',
description='a pip-installable package example',
license='MIT',
packages=['hellostackoverflow'],
author='Benjamin Gerfelder',
author_email='benjamin.gerfelder@gmail.com',
keywords=['example'],
url='https://github.com/bgse/hellostackoverflow'
)
เนื่องจากเราได้ตั้งค่าไว้license='MIT'
เราจึงรวมสำเนาในโครงการของเราเป็นLICENCE.txt
พร้อมกับไฟล์ readme ใน reStructuredText เป็นREADME.rst
:
.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
ณ จุดนี้เราพร้อมที่จะเริ่มใช้บรรจุภัณฑ์ setuptools
หากเรายังไม่ได้ติดตั้งเราสามารถติดตั้งได้ด้วยpip
:
pip install setuptools
ในการทำและสร้าง a source distribution
, ในโฟลเดอร์รูทโปรเจคของเราเราเรียกว่าsetup.py
จากบรรทัดคำสั่งโดยระบุว่าเราต้องการsdist
:
python setup.py sdist
สิ่งนี้จะสร้างแพ็คเกจการกระจายสินค้าและข้อมูลไข่ของเราและส่งผลให้โครงสร้างโฟลเดอร์เช่นนี้กับแพ็คเกจของเรา dist
:
.
├── dist/
├── hellostackoverflow.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
ณ จุดนี้เรามีแพ็คเกจที่เราสามารถติดตั้งโดยใช้ pip
ดังนั้นจากรูทโครงการของเรา (สมมติว่าคุณมีการตั้งชื่อทั้งหมดในตัวอย่างนี้):
pip install ./dist/hellostackoverflow-0.0.1.tar.gz
หากทุกอย่างไปได้ด้วยดีตอนนี้เราสามารถเปิด Python interpreter ได้ฉันจะพูดว่าอยู่นอกไดเรกทอรีโครงการของเราเพื่อหลีกเลี่ยงความสับสนและลองใช้แพ็คเกจใหม่ของเรา:
Python 3.5.2 (default, Sep 14 2017, 22:51:06)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from hellostackoverflow import hellostackoverflow
>>> hellostackoverflow.greeting()
'Hello Stack Overflow!'
ตอนนี้เราได้ยืนยันการติดตั้งและการทำงานของแพ็คเกจแล้วเราสามารถอัปโหลดไปยัง PyPI ได้
เนื่องจากเราไม่ต้องการสร้างที่เก็บข้อมูลสดด้วยการทดลองของเราเราจึงสร้างบัญชีสำหรับที่เก็บการทดสอบและติดตั้งtwine
สำหรับกระบวนการอัปโหลด:
pip install twine
ตอนนี้เราเกือบจะอยู่ที่นั่นด้วยบัญชีของเราที่สร้างขึ้นเราก็บอก twine
ให้อัพโหลดแพ็คเกจของเรามันจะขอข้อมูลประจำตัวของเราและอัปโหลดแพ็คเกจของเราไปยังพื้นที่เก็บข้อมูลที่ระบุ:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
ตอนนี้เราสามารถลงชื่อเข้าใช้บัญชีของเราในที่เก็บการทดสอบ PyPI และประหลาดใจกับแพ็คเกจที่อัปโหลดใหม่ของเราสักครู่แล้วคว้ามันโดยใช้pip
:
pip install --index-url https://test.pypi.org/simple/ hellostackoverflow
อย่างที่เราเห็นกระบวนการขั้นพื้นฐานไม่ซับซ้อนมาก อย่างที่ผมพูดไปก่อนหน้านี้มีอะไรมากกว่าที่กล่าวถึงข้างต้นดังนั้นไปข้างหน้าและอ่านบทช่วยสอนสำหรับคำอธิบายเชิงลึกเพิ่มเติม