Vài tháng trước, tôi quyết định phát hành Caer, một gói Computer Vision có sẵn bằng Python. Tôi thấy quá trình này cực kỳ đau đớn. Bạn có thể đoán được lý do tại sao — ít tài liệu (và khó hiểu), thiếu các hướng dẫn hay, v.v.
Vì vậy, tôi quyết định viết bài này với hy vọng rằng nó sẽ giúp ích cho những người đang gặp khó khăn trong việc này. Chúng tôi sẽ xây dựng một mô-đun rất đơn giản và cung cấp mô-đun đó cho mọi người trên khắp thế giới.
Nội dung của mô-đun này tuân theo một cấu trúc rất cơ bản. Tổng cộng có bốn tệp Python, mỗi tệp có một phương thức duy nhất bên trong nó. Bây giờ chúng ta sẽ giữ điều này thực sự đơn giản.
base-verysimplemodule --> Base
└── verysimplemodule --> Actual Module
├── extras
│ ├── multiply.py
│ ├── divide.py
├── add.py
├── subtract.py
Bạn sẽ nhận thấy rằng tôi có một thư mục tên là verysimplemodule
đến lượt nó có hai tệp Python add.py
và subtract.py
. Ngoài ra còn có một thư mục gọi là extras
(có chứa multiply.py
và divide.py
). Thư mục này sẽ tạo cơ sở cho mô-đun Python của chúng tôi.
Đưa ra __init__s
Một cái gì đó mà bạn sẽ luôn tìm thấy trong mọi Gói Python là một __init__.py
tập tin. Tệp này sẽ yêu cầu Python coi các thư mục là mô-đun (hoặc mô-đun con).
Rất đơn giản, nó sẽ giữ tên của tất cả các phương thức trong tất cả các tệp Python nằm trong thư mục trực tiếp của nó.
Khác biệt __init__.py
tệp có định dạng sau:
from file import method
# 'method' is a function that is present in a file called 'file.py'
Khi xây dựng các gói bằng Python, bạn được yêu cầu thêm một __init__.py
tệp trong mọi thư mục con trong gói của bạn. Các thư mục con này là mô-đun phụ của gói của bạn.
Đối với trường hợp của chúng tôi, chúng tôi sẽ thêm các tệp __init__.py của mình vào thư mục ‘actual module’ verysimplemodule
như thế này:
from add import add
from subtract import subtract
và chúng tôi sẽ làm điều tương tự cho extras
thư mục, như thế này:
from multiply import multiply
from divide import divide
Khi đã xong, chúng ta đã đi được nửa chặng đường!
Cách thiết lập setup.py
Trong base-verysimplemodule
thư mục (và trong cùng thư mục với mô-đun của chúng tôi verysimplemodule
), chúng ta cần thêm một setup.py
tập tin. Tập tin này là cần thiết nếu bạn có ý định xây dựng mô-đun thực tế trong câu hỏi.
Lưu ý: Vui lòng đặt tên cho setup.py
tập tin như bạn muốn. Tệp này không có tên cụ thể như của chúng tôi __init__.py
tập tin là.
lựa chọn tên có thể là setup_my_very_awesome_python_package.py
và python_package_setup.py
nhưng cách tốt nhất là gắn bó với setup.py
.
Các setup.py
tệp sẽ chứa thông tin về gói của bạn, cụ thể là Tên của gói, nó phiên bản, phụ thuộc nền tảng và nhiều hơn nữa.
Đối với mục đích của chúng tôi, chúng tôi sẽ không yêu cầu thông tin meta nâng cao, vì vậy đoạn mã sau sẽ phù hợp với hầu hết các gói bạn xây dựng:
from setuptools import setup, find_packages
VERSION = '0.0.1'
DESCRIPTION = 'My first Python package'
LONG_DESCRIPTION = 'My first Python package with a slightly longer description'
# Setting up
setup(
# the name must match the folder name 'verysimplemodule'
name="verysimplemodule",
version=VERSION,
author="Jason Dsouza",
author_email="<[email protected]>",
description=DESCRIPTION,
long_description=LONG_DESCRIPTION,
packages=find_packages(),
install_requires=[], # add any additional packages that
# needs to be installed along with your package. Eg: 'caer'
keywords=['python', 'first package'],
classifiers= [
"Development Status :: 3 - Alpha",
"Intended Audience :: Education",
"Programming Language :: Python :: 2",
"Programming Language :: Python :: 3",
"Operating System :: MacOS :: MacOS X",
"Operating System :: Microsoft :: Windows",
]
)
Khi đã xong, tất cả những gì chúng ta phải làm tiếp theo là chạy lệnh sau trong cùng thư mục với base-verysimplemodule
:
python setup.py sdist bdist_wheel
Điều này sẽ xây dựng tất cả các gói cần thiết mà Python sẽ yêu cầu. Các sdist
và bdist_wheel
các lệnh sẽ tạo phân phối nguồn và bánh xe mà sau này bạn có thể tải lên PyPi.
PyPi — chúng tôi đến đây!
PyPi là kho lưu trữ Python chính thức nơi lưu trữ tất cả các gói Python. Bạn có thể nghĩ về nó như là Github cho các gói Python.
Để cung cấp gói Python của bạn cho mọi người trên khắp thế giới, bạn cần phải có tài khoản với PyPi.
Khi đã hoàn thành, chúng tôi đã sẵn sàng tải gói của mình lên PyPi. Hãy nhớ phân phối nguồn và bánh xe đã được xây dựng khi chúng tôi chạy python setup.py
? Chà, đó là những thứ thực sự sẽ được tải lên PyPi.
Nhưng trước khi bạn làm điều đó, bạn cần phải cài đặt twine
nếu bạn chưa cài đặt nó. Nó đơn giản như pip install twine
.
Cách tải gói của bạn lên PyPi
Giả sử bạn có twine
đã cài đặt, hãy tiếp tục và chạy:
twine upload dist/*
Lệnh này sẽ tải lên nội dung của dist
thư mục được tạo tự động khi chúng tôi chạy python setup.py
. Bạn sẽ nhận được lời nhắc hỏi tên người dùng và mật khẩu PyPi của mình, vì vậy hãy tiếp tục và nhập chúng vào.
Bây giờ, nếu bạn đã làm theo hướng dẫn này đến chữ T, bạn có thể gặp lỗi dọc theo dòng kho lưu trữ đã tồn tại.
Điều này thường là do có xung đột tên giữa tên gói của bạn và gói đã tồn tại. Nói cách khác, hãy đổi tên gói hàng của bạn — ai đó đã lấy tên đó rồi.
Và thế là xong!
để tự hào pip
cài đặt mô-đun của bạn, kích hoạt một thiết bị đầu cuối và chạy:
pip install <package_name>
# in our case, this is
pip install verysimplemodule
Xem cách Python cài đặt gọn gàng gói của bạn từ các tệp nhị phân đã được tạo trước đó.
Mở trình bao tương tác Python và thử nhập gói của bạn:
>> import verysimplemodule as vsm
>> vsm.add(2,5)
7
>> vsm.subtract(5,4)
1
Để truy cập các phương pháp chia và nhân (hãy nhớ rằng chúng nằm trong một thư mục có tên extras
?), chạy:
>> import verysimplemodule as vsm
>> vsm.extras.divide(4,2)
2
>> vsm.extras.multiple(5,3)
15
Nó đơn giản như vậy.
Xin chúc mừng! Bạn vừa xây dựng gói Python đầu tiên của mình. Mặc dù rất đơn giản, gói của bạn hiện có sẵn để tải xuống bởi bất kỳ ai trên khắp thế giới (tất nhiên là miễn là họ có Python).
Cái gì tiếp theo?
Kiểm tra PyPi
Gói mà chúng tôi sử dụng trong hướng dẫn này là một mô-đun cực kỳ đơn giản — các phép toán cơ bản cộng, trừ, nhân và chia. Không có ý nghĩa gì khi tải chúng trực tiếp lên PyPi đặc biệt là vì bạn đang thử điều này lần đầu tiên.
Thật may mắn cho chúng tôi, có Test PyPi, một phiên bản riêng của PyPi nơi bạn có thể dùng thử và thử nghiệm trên gói của mình (bạn sẽ cần đăng ký một tài khoản riêng trên nền tảng).
Quá trình bạn làm theo để tải lên Test PyPi gần như giống với một vài thay đổi nhỏ.
# The following command will upload the package to Test PyPi
# You will be asked to provide your Test PyPi credentials
twine upload --repository testpypi dist/*
Để tải xuống các dự án từ Test PyPi:
pip install --index-url "https://test.pypi.org/simple/<package_name>"
Thông tin Meta nâng cao
Thông tin meta chúng tôi đã sử dụng trong setup.py
tập tin rất cơ bản. Bạn có thể thêm thông tin bổ sung, chẳng hạn như nhiều người bảo trì (nếu có), email của tác giả, thông tin giấy phép và toàn bộ dữ liệu khác.
Bài viết này sẽ đặc biệt hữu ích nếu bạn có ý định làm như vậy.
Nhìn vào các kho lưu trữ khác
Nhìn vào cách các kho lưu trữ khác đã xây dựng các gói của họ có thể chứng minh là cực kỳ hữu ích đối với bạn.
Khi xây dựng Caer, tôi thường xuyên xem cách Numpy và Sonnet thiết lập các gói của họ. Tôi khuyên bạn nên xem các kho lưu trữ của Caer, Numpy và Tensorflow nếu bạn có kế hoạch xây dựng các gói nâng cao hơn một chút.