Hướng dẫn python requirements lock file - tệp khóa yêu cầu python

Tổng quan

Ý kiến ​​khác nhau về cách người ta nên sử dụng các tệp khóa, tùy thuộc vào việc dự án là ứng dụng chính hay dự án thực sự là một thư viện có nghĩa là được sử dụng bởi một ứng dụng hoặc thư viện khác.

Các tập tin khóa không thể nghi ngờ hữu ích nếu bạn xây dựng bất kỳ ứng dụng nào. Tuy nhiên, nếu bạn xuất bản thư viện hoặc CLI cho một nhà xuất bản đóng gói như PYPI, các tệp khóa không bao giờ được xuất bản. Có nghĩa là người dùng của bạn và bạn có thể sử dụng các phiên bản phụ thuộc khác nhau và điều đó là tốt nếu bạn vẫn sử dụng các tệp khóa.

Cá nhân, tôi thấy các dự án thư viện không khác gì với bất kỳ dự án nào khác và tất cả các dự án xây dựng bất kể họ được triển khai ở đâu nên bao gồm một tập tin khóa vì lợi ích của các bản dựng có thể sao chép và hợp tác thành viên trong nhóm.

Nếu bạn đã quen thuộc với các ngôn ngữ khác sử dụng tệp khóa như node.js, bạn có thể đã hỏi ít nhất một lần hỏi liệu Python có thể cung cấp chức năng tương tự không. Python hoàn toàn không có tệp phụ thuộc gói và đó là lý do tại sao có nhiều tùy chọn bên ngoài nhóm Python cốt lõi như

wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
6,
wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
7 và
wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
8 phổ biến nhất làm mẫu cho PIP.
The short answer is python has no concept of lock files, equally it can be argued python has no package dependency files at all and that's why there are many options outside the core python team like
wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
6,
wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
7, and the most common
wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
8 as a pattern for Pip.

Một câu trả lời dài cho câu hỏi tập tin khóa mà bạn có thể đã học được là bạn phải viết hết các gói bằng tay và các gói của bạn toàn bộ cây phụ thuộc, và của chúng, v.v. Khóa các phiên bản bằng cách sử dụng

wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
9 của tất cả những thứ này. Bạn cũng có thể quen thuộc với
mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
0 để thử làm cho điều đó dễ dàng hơn, nhưng mọi người đã gặp phải & nbsp; biến chứng khi bỏ qua các yêu cầu được chế tạo bằng tay sau khi chạy
mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
0.
You might also be familiar with
mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
0 to try make that easier, but everyone has encountered the  complications of skipping the hand crafted requirements after running
mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
0.

Tương lai

PIP rất khó để tạo ra một người giải quyết phụ thuộc mới và sẽ sớm cung cấp một giải pháp bản địa Python cho vấn đề cũ này. Họ đang làm việc với các triển khai hiện có khác nhau (dù sao sử dụng giải pháp PIP hiện tại) đã được thể hiện trong các lần lặp lại giải pháp mà tôi đã xem xét. Pip trông rất giống Pipenv.

Nếu bạn có một phút miễn phí, hãy chạy

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
2 trên một số dự án phức tạp hơn của bạn và cung cấp cho nhóm PIP kết quả của bạn cho nghiên cứu. Và xem xét một sự đóng góp hào phóng để hỗ trợ những nỗ lực của họ cho cả cộng đồng và các công ty độc quyền dựa vào công việc của họ mà họ cho đi miễn phí.

Dung dịch

Mặc dù PIP rất khó phát triển giải pháp của họ, tôi đã viết một kịch bản rất đơn giản, tự động hóa quá trình khóa các phiên bản khóa của toàn bộ cây phụ thuộc dự án.

Cho tôi xem mã!

#!/usr/bin/env bash

CWD=$(pwd)
TMP_DIR=$1

if [[ $EUID -eq 0 ]]; then
   echo -e "${RED}x${NC} This script must not be run as root" 
   exit 1
fi
if [ -z $(which python3) ]; then
  echo "python3 not found"
  exit 1
fi
if [ -z $(which pip) ]; then
  echo "python3 pip not found"
  exit 1
fi
if [[ ! -f requirements.txt ]]; then
  echo "requirements.txt not found"
  exit 1
fi

if [[ -z "${TMP_DIR}" ]]; then
  TMP_DIR=/tmp/piplock.$(date +'%s%N')
fi
if [[ ! -z "$(which deactivate)" ]]; then
  deactivate
fi

mkdir -p ${TMP_DIR}
cd ${TMP_DIR}
python3 -m pip install -U pip
python3 -m pip install -U virtualenv
python3 -m venv .venv
source .venv/bin/activate
pip install -q -U --no-cache-dir --isolated --no-warn-conflict -r ${CWD}/requirements.txt
check=$(pip check --no-cache-dir --isolated)
check_exit=$?
if [[ $check_exit -ne 0 ]]; then
  echo ${check}
  exit 1
fi
LOCK="$(pip freeze)"
deactivate
cd ${CWD}
rm -rf ${TMP_DIR}
echo ${LOCK}

Ví dụ - Khóa phụ thuộc

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
3.

Nó là dễ dàng, có được kịch bản;

wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock

Thêm một số yêu cầu đơn giản;

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt

Chạy

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
4 sản xuất;

certifi==2020.6.20
chardet==3.0.4
decorator==4.4.2
idna==2.10
py==1.9.0
requests==2.24.0
retry==0.9.2
urllib3==1.25.10

Sự kết luận

Lưu lượng này cho phép bạn duy trì các bản dựng có thể tái tạo và phụ thuộc nhất quán cho quy trình phát triển, đồng thời cho phép các nhà phát triển bắt được bất kỳ thay đổi nào có khả năng phá vỡ cho người tiêu dùng thư viện của bạn và tất cả những điều này, đồng thời giữ cho tất cả các nhà phát triển trong nhóm của bạn hạnh phúc.

Xin chào các bạn. Hôm nay mình sẽ giới thiệu với các bạn cách tạo Virtual Environment và sử dụng thư viện trong Ngôn ngữ lập trình Python

  • Giới thiệu
  • Tạo Virtual Environment
  • Quản lý các gói thư viện bằng pip

Giới thiệu

Tạo Virtual Environment

Quản lý các gói thư viện bằng pip

Hiện tại các chương trình được viết bằng Python đang thường dùng các gói thư viện cũng như module bên ngoài các thư viện. Những chương trình này sẽ cần các phiên bản cụ thể của một thư viện nào đó.

Tạo Virtual Environment

Quản lý các gói thư viện bằng pip

Hiện tại các chương trình được viết bằng Python đang thường dùng các gói thư viện cũng như module bên ngoài các thư viện. Những chương trình này sẽ cần các phiên bản cụ thể của một thư viện nào đó.

python3 -m venv tutorial-env

Điều này có nghĩa là mỗi một thư viện của Python sẽ chỉ phù hợp cho một chương trình cụ thể nào đó mà nó sử dụng chứ không thể có một thư viện có thể sử dụng cho tất cả các chương trình Python được.

Giải pháp xử lý vấn đề này là tạo ra

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
5, một thư mục chứa phiên bản cụ thể của một thư viện cụ thể, hoặc thậm chí chứa bộ thư viện chuẩn của Python theo phiên bản nào đó.

Module được sử dụng để tạo và quản lý virtual enviroment có tên là

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
6.
mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
6 thường sẽ cài đặt các thư viện Python mới nhất trên máy tính của bạn vào virtual enviroment. Nếu bạn có nhiều phiên bản Python trên máy tính, bạn có thể chọn lựa phiên bản Python bằng lệnh
mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
8 hoặc bất cứ phiên bản Python nào bạn muốn.

tutorial-env\Scripts\activate.bat

Để tạo virtual enviroment, đầu tiên bạn chọn một thư mục, rồi gõ vào terminal:

source tutorial-env/bin/activate

Lệnh này sẽ tạo thư mục

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
9 nếu nó chưa tồn tại, cùng với đó là các thư mục con chứa trình thông dịch Python, các thư viện Python chuẩn và các file cần thiết khác.

$ source ~/envs/tutorial-env/bin/activate
(tutorial-env) $ python
Python 3.5.1 (default, May  6 2016, 10:59:36)
  ...
>>> import sys
>>> sys.path
['', '/usr/local/lib/python35.zip', ...,
'~/envs/tutorial-env/lib/python3.5/site-packages']
>>>

Quản lý các gói thư viện bằng pip

Hiện tại các chương trình được viết bằng Python đang thường dùng các gói thư viện cũng như module bên ngoài các thư viện. Những chương trình này sẽ cần các phiên bản cụ thể của một thư viện nào đó.pip. Mặc định,

certifi==2020.6.20
chardet==3.0.4
decorator==4.4.2
idna==2.10
py==1.9.0
requests==2.24.0
retry==0.9.2
urllib3==1.25.10
0 sẽ cài đặt các gói thư viện nằm trên Python Package Index. Bạn có thể tìm hiểu các gói thư viện này bằng cách tìm kiếm thông qua lệnh
certifi==2020.6.20
chardet==3.0.4
decorator==4.4.2
idna==2.10
py==1.9.0
requests==2.24.0
retry==0.9.2
urllib3==1.25.10
0 trên shell:

(tutorial-env) $ pip search astronomy
skyfield               - Elegant astronomy for Python
gary                   - Galactic astronomy and gravitational dynamics.
novas                  - The United States Naval Observatory NOVAS astronomy library
astroobs               - Provides astronomy ephemeris to plan telescope observations
PyAstronomy            - A collection of astronomy related tools for Python.
...

Điều này có nghĩa là mỗi một thư viện của Python sẽ chỉ phù hợp cho một chương trình cụ thể nào đó mà nó sử dụng chứ không thể có một thư viện có thể sử dụng cho tất cả các chương trình Python được.

Giải pháp xử lý vấn đề này là tạo ra

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
5, một thư mục chứa phiên bản cụ thể của một thư viện cụ thể, hoặc thậm chí chứa bộ thư viện chuẩn của Python theo phiên bản nào đó.

(tutorial-env) $ pip install novas
Collecting novas
  Downloading novas-3.1.1.3.tar.gz (136kB)
Installing collected packages: novas
  Running setup.py install for novas
Successfully installed novas-3.1.1.3

Module được sử dụng để tạo và quản lý virtual enviroment có tên là

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
6.
mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
6 thường sẽ cài đặt các thư viện Python mới nhất trên máy tính của bạn vào virtual enviroment. Nếu bạn có nhiều phiên bản Python trên máy tính, bạn có thể chọn lựa phiên bản Python bằng lệnh
mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
8 hoặc bất cứ phiên bản Python nào bạn muốn.

wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
0

Để tạo virtual enviroment, đầu tiên bạn chọn một thư mục, rồi gõ vào terminal:

wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
1

Lệnh này sẽ tạo thư mục

mkdir -p test-piplock
cd test-piplock
echo -e "retry\nrequests" > requirements.txt
9 nếu nó chưa tồn tại, cùng với đó là các thư mục con chứa trình thông dịch Python, các thư viện Python chuẩn và các file cần thiết khác.

Sau khi tạo virtual environment, bạn cần kích hoạt (activate) nó để sử dụng.

wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
2

Trên Windows, gõ lệnh:

wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
3

Trên Unix hoặc MacOS, gõ lệnh:

wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
4

Kích hoạt virtual environment sẽ chuyển điều khiển từ OS shell về shell của virtual enviroment bạn đang sử dụng, và lúc này bạn sẽ thấy các thư viện trên virtual enviroment hiện tại khác với thư viện trên virtual enviroment khác. Ví về sự khác biệt giữa phiên bản Python trong và ngoài virtual enviroment:

wget -q https://gist.githubusercontent.com/chrisdlangton/905a14e7a42118e0d6b5a45c8ce1d3a0/raw/f0916b0b99187a9e839146fbd4e3d5bc26e5d97a/piplock.sh -O piplock.sh
chmod a+x piplock.sh
mv piplock.sh /usr/local/bin/piplock
5

Bạn có thể cài đặt, nâng cấp, xóa bỏ các gói thư viện bằng một chương trình tên là pip. Mặc định,

certifi==2020.6.20
chardet==3.0.4
decorator==4.4.2
idna==2.10
py==1.9.0
requests==2.24.0
retry==0.9.2
urllib3==1.25.10
0 sẽ cài đặt các gói thư viện nằm trên Python Package Index. Bạn có thể tìm hiểu các gói thư viện này bằng cách tìm kiếm thông qua lệnh
certifi==2020.6.20
chardet==3.0.4
decorator==4.4.2
idna==2.10
py==1.9.0
requests==2.24.0
retry==0.9.2
urllib3==1.25.10
0 trên shell:

Thao Khảo

https://docs.python.org/3/tutorial/venv.html