Chuyển đổi cython thành python

Bảo vệ các nguồn Python của bạn khỏi những trình đọc không mong muốn thì nói dễ hơn làm, bởi vì. mã byte pyc có thể giải mã được và quá trình mã hóa dễ dàng được thiết kế ngược. Tôi đã mất một lúc để tìm ra cách thích hợp để ẩn mã Python…

Làm quen với Cython, một trình biên dịch tĩnh tối ưu hóa lấy các mô-đun .py của bạn và dịch chúng sang các tệp C hiệu suất cao. Các tệp C kết quả có thể được biên dịch thành các thư viện nhị phân gốc mà không cần nỗ lực. Khi quá trình biên dịch hoàn tất, không có cách nào để đảo ngược các thư viện đã biên dịch trở lại mã nguồn Python có thể đọc được. Cython hỗ trợ cả Python 2 và 3, bao gồm cú pháp async/await hiện đại. Theo kinh nghiệm của tôi, điều duy nhất nó không thể làm là máy phát điện không đồng bộ

1. Cài đặt Cython

Việc cài đặt dễ dàng như gõ pip install cython hoặc pip3 install cython (dành cho Python 3)

2. thêm biên dịch. py

Thêm tập lệnh sau vào thư mục dự án của bạn (như compile.py). Nó sẽ hoạt động như một “makefile” cho bản dựng

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [
Extension("mymodule1", ["mymodule1.py"]),
Extension("mymodule2", ["mymodule2.py"]),
# .. all your modules that need be compiled ...]setup(
name = 'My Program Name',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)

Tập lệnh phải liệt kê rõ ràng các tệp mà bạn muốn biên dịch. Bạn cũng có thể để lại một số tệp chưa được biên dịch, nếu bạn muốn. Những thứ đó vẫn sẽ duy trì khả năng import từ các mô-đun nhị phân

3. thêm chính. py

Tạo tệp Python điểm đầu vào cho ứng dụng của bạn. Bạn sẽ nhập và khởi chạy tất cả logic đã biên dịch từ đó. Cần có một tệp điểm đầu vào vì Cython không tạo các tệp nhị phân thực thi theo mặc định (mặc dù nó có khả năng), vì vậy bạn sẽ cần một tệp Python giả, nơi bạn chỉ cần nhập tất cả logic đã biên dịch và chạy nó. Nó có thể đơn giản như

from logic import main      # this comes from a compiled binary
main ()
4. Chạy biên dịch. py

Tùy thuộc vào phiên bản Python bạn sử dụng, hãy chạy

python compile.py build_ext --inplace

…hoặc, cho Python 3

python3 compile.py build_ext --inplace

Lệnh trên sẽ tạo các tệp .so

from logic import main      # this comes from a compiled binary
main ()
0 bên cạnh tệp nguồn .py của bạn

Tệp

from logic import main      # this comes from a compiled binary
main ()
0 là nguồn trung gian được sử dụng để tạo tệp .so, là mô-đun nhị phân mà bạn muốn phân phối. Khi xây dựng trên Windows, các tệp này có thể sẽ có phần mở rộng
from logic import main      # this comes from a compiled binary
main ()
4 (CẬP NHẬT. trong các nhận xét, mọi người gợi ý rằng họ thực sự có tiện ích mở rộng
from logic import main      # this comes from a compiled binary
main ()
5 trên Windows)

Bạn có thể xóa các tệp

from logic import main      # this comes from a compiled binary
main ()
0 và .py sau khi tạo thành công và chỉ giữ lại các tệp .so

Lưu ý rằng các tệp .so chứa nền tảng đích trong tên của chúng (e. g.

python compile.py build_ext --inplace
0 trên MacOS của tôi). Rõ ràng, các mô-đun được biên dịch không đa nền tảng. Nếu bạn phân phối chương trình của mình cho người dùng Ubuntu Linux, bạn nên biên dịch nó trên Linux. Nếu không, bạn sẽ không thể tải các tệp nhị phân này. Vì vậy, bạn sẽ phải biên dịch một phiên bản mã dành riêng cho nền tảng cho từng nền tảng được nhắm mục tiêu của mình

May mắn thay, có những công cụ như Vagrant có thể giúp giảm tất cả gánh nặng cài đặt hệ điều hành xuống chỉ bằng một vài lệnh đơn giản…

Thiết lập môi trường hệ điều hành khác bằng VirtualBox và Vagrant

Đây là một ví dụ về cách tôi quản lý để biên dịch dự án của mình trên Ubuntu 16. 04, trong khi sử dụng MacOS

  1. Cài đặt VirtualBox và Vagrant
  2. Chạy
    python compile.py build_ext --inplace
    1 (bạn có thể thêm nó vào tập lệnh khởi động Bash của mình tại
    python compile.py build_ext --inplace
    2 để thuận tiện)
  3. Chọn một hệ điều hành ở đây. https. //ứng dụng. lang thang. com/hộp/tìm kiếm. Sau đó nhấp vào tab Mới trong phần “Cách sử dụng”. Bạn sẽ tìm thấy các hướng dẫn và lệnh thiết lập ở đó. Chạy các lệnh đó trong thư mục dự án Python của bạn

Cuối cùng, chạy

python compile.py build_ext --inplace
3 để vào bảng điều khiển Ubuntu mới cài đặt (nhập
python compile.py build_ext --inplace
4 để thoát)

python compile.py build_ext --inplace
5 vào thư mục
python compile.py build_ext --inplace
6 để xem tệp dự án của bạn. Sau đó thực hiện các bước 1, 4 từ sách hướng dẫn này và bạn đã hoàn tất

Đối với các dự án có chu kỳ xây dựng/phát hành ngắn, các bản dựng đa nền tảng có thể được tự động hóa bằng cách sử dụng dịch vụ CI (Tích hợp liên tục), như Travis CI, nhưng đó là câu chuyện dành cho một bài viết khác