Thứ ba, 14/01/2014 | 00:00 GMT+7

Cách đóng gói và phân phối các ứng dụng Python

Tất cả các thư viện Python (tức là các gói ứng dụng) mà bạn download bằng trình quản lý gói (ví dụ: pip) được phân phối bằng một tiện ích dành riêng để thực hiện công việc. Các tiện ích này tạo ra "bản phân phối Python" về cơ bản là các bản lưu trữ được tạo version (và nén). Tất cả các yếu tố liên quan đến những gì đang được phân phối, chẳng hạn như file nguồn và file tài nguyên, đều được chứa bên trong nó.


Trong bài viết DigitalOcean này, ta sẽ nói về các công cụ cần thiết để phân phối và đi qua các bước chính để cho phép bạn đóng gói các thư viện, module hoặc ứng dụng hữu ích của riêng mình - những công cụ này sẽ giúp bạn khi triển khai dự án của bạn trên một server hoặc chia sẻ trên mạng.

Các gói và phân phối Python


Ngay cả khi bạn chỉ làm việc một chút với Python, bạn sẽ quen với khái niệm sử dụng trình quản lý gói (ví dụ: pip, easy_install) để download các module và thư viện (ví dụ: khung phát triển ứng dụng), sau đó được nhập và sử dụng để tạo mới một.

Các công cụ quản lý gói này, hoạt động local , kết nối với một nguồn (tức là Index gói Python - PyPI ) và thực hiện một hành động mong muốn (ví dụ: tìm kiếm và cài đặt) khi chúng hoạt động các tài nguyên này thực sự được gọi là bản phân phối Python.

Cách phân phối một ứng dụng bao gồm gói folder của nó bằng một số file phải có (cùng với một số file được đề xuất), chỉ định các phần tử liên quan (ví dụ: tài nguyên, phụ thuộc, v.v.) và phát hành hoặc sử dụng nó ở nơi khác… đơn giản vậy.

Lưu ý: Ta rất khuyến khích bạn làm việc với môi trường ảo để cô lập các bản download Python, module và ứng dụng mà bạn đang làm việc.

Gói Python


Trong Python, một gói [về mặt kỹ thuật] là một folder có thể nhập (với __init__.py ) chứa các file nguồn (tức là các module ). Điều này sẽ không bị nhầm lẫn với các gói hệ điều hành, là các ứng dụng thực tế [về mặt kỹ thuật] (tức là gói Debian). Tuy nhiên, cần lưu ý các bản phân phối Python thực sự cũng được gọi là các gói.

Cấu trúc gói ví dụ:

package   |   |-- __init__.py 

Ứng dụng Python


Mặc dù bất kỳ thứ gì từ một file đến một file với hàng trăm file nằm rải rác trên các gói khác nhau đều có thể được coi là một ứng dụng trong Python, trong hầu hết các tình huống thực tế, một ứng dụng sẽ bao gồm nhiều module và một lượng nhập bên ngoài nhất định (từ các thư viện).

Cấu trúc ứng dụng mẫu:

myapp   |   |-- __init__.py   |-- amodule.py   |-- anothermod.py   |__ tests   |     |   |     |-- __init__.py   |     |-- ..   |     |-- .   | .. 

Thư viện và công cụ phân phối Python


Với bản chất phổ biến của Python và số lượng thư viện / ứng dụng của bên thứ ba được viết cho nó, một cách phân phối đơn giản và thống nhất luôn là điều cần thiết. Đã có một số công cụ và thư viện khác nhau được sử dụng để tạo các bản phân phối Python.

Để đối phó với nhiệm vụ phân phối, tiện ích phân phối Python Toolset distutils đã được tạo ra.

Index gói Python (PyPI)


Python Package Index, hoặc PyPI, là một repository [trực tuyến] trung tâm cho các dự án (các bản phân phối Python). Các công cụ quản lý gói như pip sử dụng kho này để lưu trữ, tìm và cài đặt chúng.

Bắt đầu


Hãy bắt đầu với việc tạo một ứng dụng [cấu trúc] bình Python đơn giản, mà sau đó ta có thể sử dụng để đóng gói.

Tạo cấu trúc ứng dụng


Ta mong muốn tạo ra một ví dụ giống với hầu hết các dự án trong thế giới thực. Do đó, tốt nhất là bạn nên tưởng tượng một kịch bản với các thành phần được modularised.

Cấu trúc ví dụ:

/MyApplication     |-- run.py     |-- config.py     |__ /app          |-- __init__.py          |-- /module_one              |-- __init__.py              |-- controllers.py              |-- models.py                          |__ /templates              |-- module_one                  |-- hello.html          |__ /static          |__ ..          |__ . 

Tạo các folder :


mkdir ~/MyApplication cd    ~/MyApplication touch run.py touch config.py mkdir app cd    app touch __init__.py mkdir templates mkdir static mkdir module_one cd    module_one touch __init__.py touch controllers.py touch models.py cd    ../templates mkdir module_one cd    module_one touch hello.html 

Chỉnh sửa run.py bằng nano:


nano ~/MyApplication/run.py 

Đặt nội dung:

# Run a test server. from app import app app.run(debug=True) 

Lưu và thoát bằng CTRL + X và xác nhận bằng Y.

Chỉnh sửa config.py bằng nano:


nano ~/MyApplication/config.py 

Đặt nội dung:

DEBUG = True  THREADS_PER_PAGE = 4  CSRF_ENABLED     = True CSRF_SESSION_KEY = "secret" 

Lưu và thoát bằng CTRL+X và xác nhận bằng Y

Chỉnh sửa app / init .py bằng nano:


nano ~/MyApplication/app/__init__.py 

Đặt nội dung:

from flask import Flask, render_template  app = Flask(__name__) app.config.from_object("config")  from app.module_one.controllers import module_one  app.register_blueprint(module_one) 

Lưu và thoát bằng CTRL + X và xác nhận bằng Y.

Chỉnh sửa app / module_one / controllers.py bằng nano:


nano app/module_one/controllers.py 

Đặt nội dung:

from flask import Blueprint, request, render_template  module_one = Blueprint("auth", __name__, url_prefix="/auth")  @module_one.route("/hello") def hello():     return render_template("module_one/hello.html") 

Lưu và thoát bằng CTRL+X và xác nhận bằng Y

Đặt nội dung:

Chỉnh sửa ứng dụng / mẫu / module_one / hello.html bằng nano:


nano app/templates/module_one/hello.html 

Đặt nội dung:

<pre>
& lt! DOCTYPE html>
& lthtml lang = “en”>
& lthead>
& lttitle> {% block title%} Trang web của tôi {% endblock%} </title>
{% khối css%}
{% endblock%}
& ltmeta name = “viewport” content = “width = device-width, initial-scale = 1.0”>
& lt / head>
& ltbody>
Chào thế giới!
& lt / body>
& lt / html>
</pre>

Lưu và thoát bằng CTRL + X và xác nhận bằng Y.

Bắt đầu với Phân phối / Đóng gói Ứng dụng


Sau khi tạo cấu trúc ứng dụng mẫu của một trang web sử dụng flask, ta có thể tiếp tục thực hiện bước đầu tiên để chuẩn bị phân phối.

Thay đổi cấu trúc folder


Để đóng gói ứng dụng của ta tốt, ta cần thực hiện một số bổ sung vào cấu trúc folder của bạn .

/MyApplication     |-- run.py     |__ /app          |-- __init__.py          |-- /module_one              |-- __init__.py              |-- controllers.py              |-- models.py                          |__ /templates              |-- module_one                  |-- hello.html          |__ /static          |__ ..          |__ .     |-- setup.py    # Distribution setup file     |-- README.txt  # Read-me file     |-- MANIFEST.in # Distribution manifest file     |-- CHANGES.txt # Changes log 

Thay đổi cấu trúc folder để tạo các file cần thiết:

touch ~/MyApplication/setup.py touch ~/MyApplication/README.py touch ~/MyApplication/MANIFEST.py touch ~/MyApplication/CHANGES.py mv    ~/MyApplication/run.py ~/MyApplication/bin/run 

Tạo setup.py


nano ~/MyApplication/setup.py 

Đặt các nội dung tự giải thích bên dưới:

from distutils.core import setup  setup(     # Application name:     name="MyApplication",      # Version number (initial):     version="0.1.0",      # Application author details:     author="name surname",     author_email="name@addr.ess",      # Packages     packages=["app"],      # Include additional files into the package     include_package_data=True,      # Details     url="http://pypi.python.org/pypi/MyApplication_v010/",      #     # license="LICENSE.txt",     description="Useful towel-related stuff.",      # long_description=open("README.txt").read(),      # Dependent packages (distributions)     install_requires=[         "flask",     ], ) 

Lưu và thoát bằng CTRL + X và xác nhận bằng Y.

Tạo MANIFEST.in


Nếu bạn cần gửi các folder bổ sung (ví dụ: tĩnh hoặc mẫu), bạn cần phải trình bày rõ ràng chúng trong tệp kê khai được đóng gói. Ta sẽ thực hiện việc này bên trong MANIFEST.in .

nano ~/MyApplication/MANIFEST.in 

Đặt các nội dung tự giải thích bên dưới:

recursive-include app/templates * recursive-include app/static * 

Lưu và thoát bằng CTRL + X và xác nhận bằng Y.

Và đó là nó! Gói phân phối Python của bạn đã sẵn sàng để được cài đặt và vận chuyển.

Các file bổ sung


Lưu ý để có một bản phân phối hoàn chỉnh, file / folder của bạn phải chứa (và được liên kết):

  • README.txt

  • MANIFEST.in

  • LICENSE.txt

Làm việc với ứng dụng sẵn sàng phân phối


Khi ta đã hoàn thành việc tạo ứng dụng của bạn , tiếp theo là thực hiện các sửa đổi cần thiết đối với cấu trúc file để chuẩn bị cho một bản dựng phân phối hoàn hảo, ta có thể bắt đầu thực hiện các thao tác đóng gói.

Cách tạo file phân phối


Để tạo bản sao file phân phối, hãy chạy như sau:

cd     ~/MyApplication python setup.py sdist 

Lệnh này sẽ đi qua cài đặt của bạn, in ra các thao tác đang được thực hiện và tạo một repository tar bên trong folder dist mới được tạo, tương tự như:

# root@hostname:~/MyApplication# ls dist # MyApplication-0.1.0.tar.gz 

Lưu ý: Vì ta không điền tất cả các folder con (tức là tĩnh) và làm việc với các file bổ sung (ví dụ: README.txt ), bạn có thể thấy một số cảnh báo trong quá trình tạo.

Cách cài đặt ứng dụng


Từ bây giờ, ứng dụng của bạn có thể được người khác cài đặt và sử dụng bằng cách sử dụng file setup.py đã tạo.

Để cài đặt ứng dụng, hãy chạy như sau:

python setup.py install 

Nếu cài đặt này là để phát triển và các yêu cầu cũng được cài đặt, hãy chạy như sau:

python setup.py develop 

Cách chia sẻ ứng dụng của bạn


Nếu bạn muốn chia sẻ mã của bạn trên Chỉ mục đóng gói Python, bạn có thể thực hiện bằng cách bắt đầu quy trình “đăng ký” như sau:

python setup.py register 

Bạn cần phải hoàn tất quy trình theo hướng dẫn trên màn hình.

Nếu bạn có đăng nhập đã đăng ký, để chỉ tải lên, bạn có thể sử dụng những điều sau:

python setup.py sdist upload 

Cách tạo các gói version mới cho ứng dụng của bạn


  1. Chỉnh sửa file setup.py bằng editor (ví dụ: nano) và đặt số version mới: version="0.1.1"

  2. Chỉnh sửa CHANGES.txt để áp dụng thay đổi

  3. Thực hiện các điều chỉnh cần thiết đối với LICENSE.txt và README.txt

  4. Tải lên mã của bạn theo bước trước đó.

<div class = “author”> Gửi bởi: <a
href = “https://twitter.com/ostezer”> Hệ điều hành Tezer </a> </div>


Tags:

Các tin liên quan

Cách triển khai ứng dụng web WSGI Python dựa trên kim tự tháp
2013-12-30
Cách triển khai ứng dụng WSGI Python bằng server Gunicorn HTTP đằng sau Nginx
2013-12-12
Cách triển khai ứng dụng WSGI Python bằng web server uWSGI với Nginx
2013-12-11
Cách triển khai ứng dụng WSGI Python bằng web server CherryPy đằng sau Nginx
2013-12-10
Cách sử dụng khung kim tự tháp để xây dựng ứng dụng web Python của bạn trên Ubuntu
2013-12-10
Cách thiết lập Python 2.7.6 và 3.3.3 trên CentOS 6.4
2013-12-04
Các công cụ Python phổ biến: Sử dụng virtualenv, Cài đặt bằng Pip và Quản lý Gói
2013-12-03
Cách tạo plugin Nagios bằng Python trên Ubuntu 12.10
2013-04-29
Cách tạo plugin Nagios bằng Python trên CentOS 6
2013-04-29