Vì chưa có ai trả lời câu hỏi này của OP:
Những gì tôi muốn làm:
Tạo một mô-đun python có thể cài đặt với "pip install ..."
Dưới đây là một ví dụ tối thiểu tuyệt đối, hiển thị các bước cơ bản để chuẩn bị và tải gói của bạn lên PyPI bằng cách sử dụng setuptools
và twine
.
Đây không phải là một sự thay thế cho việc đọc ít nhất là hướng dẫn , có nhiều thứ hơn là được trình bày trong ví dụ rất cơ bản này.
Việc tạo gói chính nó đã được bao phủ bởi các câu trả lời khác ở đây, vì vậy chúng ta hãy giả sử rằng chúng ta có bước đó được bảo hiểm và cấu trúc dự án của chúng ta như thế này:
.
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Để sử dụng setuptools
cho việc đóng gói, chúng tôi cần thêm một tệp setup.py
, điều này đi vào thư mục gốc của dự án của chúng tôi:
.
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Tối thiểu, chúng tôi chỉ định siêu dữ liệu cho gói của chúng tôi, chúng tôi setup.py
sẽ trông như thế này:
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'
)
Vì chúng tôi đã thiết lập license='MIT'
, chúng tôi bao gồm một bản sao trong dự án của chúng tôi LICENCE.txt
, cùng với tệp readme trong reSturationuredText như README.rst
:
.
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Tại thời điểm này, chúng tôi đã sẵn sàng để bắt đầu sử dụng bao bì setuptools
, nếu chúng tôi chưa cài đặt nó, chúng tôi có thể cài đặt nó với pip
:
pip install setuptools
Để làm điều đó và tạo một source distribution
, tại thư mục gốc dự án của chúng tôi, chúng tôi gọi chúng tôi setup.py
từ dòng lệnh, chỉ định chúng tôi muốn sdist
:
python setup.py sdist
Điều này sẽ tạo gói phân phối và thông tin trứng của chúng tôi và dẫn đến cấu trúc thư mục như thế này, với gói của chúng tôi trong dist
:
.
├── dist/
├── hellostackoverflow.egg-info/
├── LICENCE.txt
├── README.rst
├── setup.py
└── hellostackoverflow/
├── __init__.py
└── hellostackoverflow.py
Tại thời điểm này, chúng tôi có một gói chúng tôi có thể cài đặt bằng cách sử dụng pip
, do đó, từ gốc dự án của chúng tôi (giả sử bạn có tất cả các cách đặt tên như trong ví dụ này):
pip install ./dist/hellostackoverflow-0.0.1.tar.gz
Nếu mọi việc suôn sẻ, bây giờ chúng ta có thể mở trình thông dịch Python, tôi sẽ nói ở đâu đó bên ngoài thư mục dự án của chúng tôi để tránh mọi sự nhầm lẫn và cố gắng sử dụng gói mới sáng bóng của chúng tôi:
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!'
Bây giờ chúng tôi đã xác nhận gói cài đặt và hoạt động, chúng tôi có thể tải nó lên PyPI.
Vì chúng tôi không muốn làm ô nhiễm kho lưu trữ trực tiếp bằng các thử nghiệm của mình, chúng tôi tạo một tài khoản cho kho lưu trữ thử nghiệm và cài đặt twine
cho quá trình tải lên:
pip install twine
Bây giờ chúng tôi gần như ở đó, với tài khoản của chúng tôi được tạo, chúng tôi chỉ cần twine
yêu cầu tải lên gói của chúng tôi, nó sẽ yêu cầu thông tin đăng nhập của chúng tôi và tải gói của chúng tôi lên kho lưu trữ được chỉ định:
twine upload --repository-url https://test.pypi.org/legacy/ dist/*
Bây giờ chúng tôi có thể đăng nhập vào tài khoản của mình trên kho lưu trữ kiểm tra PyPI và ngạc nhiên với gói mới tải lên của chúng tôi trong một thời gian, sau đó lấy nó bằng cách sử dụng pip
:
pip install --index-url https://test.pypi.org/simple/ hellostackoverflow
Như chúng ta có thể thấy, quá trình cơ bản không phức tạp lắm. Như tôi đã nói trước đó, có rất nhiều điều hơn là được đề cập ở đây, vì vậy hãy tiếp tục và đọc hướng dẫn để được giải thích sâu hơn.