আমি বেশ কয়েকটি প্রকল্প জুড়ে 10x গতি সম্পর্কে লক্ষ্য করেছি, আমরা একটি ভেনভ ব্যবহার এড়াতে এবং অ-রুট ব্যবহারকারী হিসাবেও জিনিসগুলি চালাব।
ভিডিও পছন্দ? এখানে এটা ইউটিউবে।
জিনিসগুলি স্যুইচ করা কতটা বেদনাদায়ক ছিল তা দেখে আমি অবাক হয়েছি। আমার উভয়ের উদাহরণের জন্য আপনি গিট ডিফস দেখতে পারেন
ফ্লাস্ক
এবং
জ্যাঙ্গো
প্রকল্প। এই পোস্টে আমরা এই পরিবর্তনগুলি এবং কীভাবে কয়েকটি ব্যবহার করবেন সে সম্পর্কে আরও বিশদে যাব uv
কমান্ড
#
pyproject.toml বনাম প্রয়োজনীয়তা.টেক্সট
আসুন আমাদের প্রকল্পের নির্ভরতাগুলি সংজ্ঞায়িত করে শুরু করা যাক।
আপনি একটি তৈরি করতে পারেন pyproject.toml
ফাইল এবং আপনার মুছুন requirements.txt
আপনি আপনার প্রকল্পের নির্ভরতা এবং তাদের সংস্করণগুলিতে প্রবেশের পরে
pyproject.toml
।
আপনাকে কেবল আপনার শীর্ষ স্তরের নির্ভরতা যুক্ত করতে হবে, ইউভি আপনার জন্য স্বয়ংক্রিয়ভাবে একটি লক ফাইল তৈরি করবে যা কিছুটা তুলনীয় pip freeze
ইউভির লক ফাইলের যথাযথ নির্ভরতা গাছ রয়েছে এবং এটি আরও ভাল।
এখানে একটি খুব ছোট পার্থক্য রয়েছে যা কী করতে হবে তার একটি উদাহরণ দেখায়, এটি প্রয়োজন হিসাবে সামঞ্জস্য করুন:
# pyproject.toml
+(project)
+dependencies = (
+ "redis==5.2.1",
+)
# requirements.txt
-redis==5.2.1
#
ডকারফিল
এই পদক্ষেপগুলি ক্রমযুক্ত হওয়া গুরুত্বপূর্ণ। উদাহরণস্বরূপ আপনি আপনার নির্ভরতা ইনস্টল করার আগে পরিবেশের ভেরিয়েবলগুলি সংজ্ঞায়িত করতে চান।
ইউভি ইনস্টল করুন
+COPY --from=ghcr.io/astral-sh/uv:0.7.13 /uv /uvx /usr/local/bin/
- উভয় নিশ্চিত করুন
uv
এবংuvx
বাইনারিগুলি আপনার সিস্টেমের পথে ইনস্টল করা আছে
নির্ভরতা ফাইল
-COPY --chown=python:python requirements*.txt ./
+COPY --chown=python:python pyproject.toml uv.lock* ./
- পরিবর্তে ইউভির নির্ভরতা সম্পর্কিত ফাইলগুলি রেফারেন্স
- যে পিছনে
*
গুরুত্বপূর্ণ কারণ এটি লক ফাইলটিকে al চ্ছিক করে তোলে- প্রথমবার আপনি আপনার প্রকল্পটি তৈরি করেন লক ফাইলটি বিদ্যমান নাও থাকতে পারে
- যে পিছনে
পরিবেশ ভেরিয়েবল
+ENV \
+ UV_COMPILE_BYTECODE=1 \
+ UV_PROJECT_ENVIRONMENT="/home/python/.local" \
UV_COMPILE_BYTECODE
- পাইথন উত্স ফাইলগুলি বাইটকোডে সংকলিত হবে
- এটি পছন্দ করা হয় যেহেতু সমস্ত বাইটকোড বিল্ড টাইমে একবার সংকলিত হয়
- ধারকটি শুরু হলে আপনার অ্যাপ্লিকেশনটি রান-টাইমে এটি করার দরকার নেই
- এটি পছন্দ করা হয় যেহেতু সমস্ত বাইটকোড বিল্ড টাইমে একবার সংকলিত হয়
- পাইথন উত্স ফাইলগুলি বাইটকোডে সংকলিত হবে
UV_PROJECT_ENVIRONMENT
ভার্চুয়াল পরিবেশ (ভেনভ) না করার জন্য ইউভিকে নির্দেশ দেয়- আমার উদাহরণ অ্যাপ্লিকেশনগুলি নন-রুট হিসাবে জিনিসগুলি চালায়
python
ব্যবহারকারী - শেষ পর্যন্ত সমস্ত পাইথন নির্ভরতা এই পথে ইনস্টল করা হবে
- আমার উদাহরণ অ্যাপ্লিকেশনগুলি নন-রুট হিসাবে জিনিসগুলি চালায়
নির্ভরতা ইনস্টল কমান্ড
-RUN chmod 0755 bin/* && bin/pip3-install
+RUN chmod 0755 bin/* && bin/uv-install
উভয় ক্ষেত্রেই আমি তাদের ইনস্টল কমান্ডগুলি একটি পৃথক স্ক্রিপ্টে বের করেছি তাই ডকারফাইলে বিল্ড টাইমে চালানো সহজ (উপরে দেখা গেছে), অথবা আপনার লক ফাইলটি কোনও ভলিউমের মাধ্যমে আপনার হোস্ট মেশিনে আপডেট হয়েছে তা নিশ্চিত করার জন্য রান-টাইমে এটি কমান্ড হিসাবে চালিয়ে যায়।
যাই হোক না কেন, উভয় সমাধান কেবল শেল স্ক্রিপ্ট। মন্তব্য সহ ইউভির জন্য এখানে একটি:
#!/usr/bin/env bash
set -o errexit
set -o pipefail
# Ensure we always have an up to date lock file.
if ! test -f uv.lock || ! uv lock --check 2>/dev/null; then
uv lock
fi
# Use the existing lock file exactly how it is defined.
uv sync --frozen --no-install-project
ইউভি ব্যবহারের কয়েকটি উপায় রয়েছে যেমন এর পিআইপি সাব-কমান্ড ব্যবহার করা তবে আমি সিঙ্ক ব্যবহার করতে পছন্দ করি যেহেতু এটি কাজ করার “ইউভি উপায়”। পিআইপি সাব-কমান্ডটি ইউভি কীভাবে কাজ করে তার একটি মানসিক মডেল তৈরি করতে সহায়তা করার জন্য রয়েছে বা আপনি যদি পছন্দ করেন তবে ইউভির মাধ্যমে পিআইপি’র কমান্ডগুলি ব্যবহার চালিয়ে যেতে সহায়তা করার জন্য রয়েছে।
দ্য --frozen
পতাকা নিশ্চিত করে যে লক ফাইলটি আপডেট হয় না। আমরা ঠিক এটিই চাই কারণ আমরা আশা করি লক ফাইলটি ইনস্টল হওয়া সমস্ত নির্ভরতাগুলির জন্য আমরা সঠিক সংস্করণগুলির একটি সম্পূর্ণ তালিকা ব্যবহার করতে চাই।
দ্য --no-install-project
পাইথন প্যাকেজ হিসাবে আপনার কোডটি ইনস্টল করা পতাকা এড়িয়ে যান। যেহেতু আমাদের একটি আছে pyproject.toml
একটি প্রকল্পের সংজ্ঞায়িত ডিফল্ট আচরণটি এটি প্যাকেজ হিসাবে ইনস্টল করা।
একটি সাধারণ ওয়েব অ্যাপের জন্য, আপনার সাধারণত আপনার প্রকল্পের নির্ভরতা থাকে এবং এটি। আপনার প্রকল্পটি নিজের মধ্যে কোনও ইনস্টলযোগ্য প্রকল্প নয়। তবে, যদি আপনার কাছে এই ব্যবহারের কেসটি থাকে তবে এই পতাকাটি অপসারণ করতে নির্দ্বিধায়! আপনি এটি ব্যবহার হিসাবে ভাবতে পারেন --editable .
পিআইপি সহ।
#
আপনার নির্ভরতা যুক্ত করুন, আপডেট করুন বা মুছুন
আপনি যদি আমার উদাহরণ স্টার্টার অ্যাপটি ব্যবহার করছেন তবে এটি কয়েকটি রান স্ক্রিপ্ট শর্টকাট সহ আসে। তারা একটি ধারকটিতে নির্দিষ্ট কমান্ডগুলি চালানোর জন্য শর্টকাট শেল স্ক্রিপ্টগুলি:
./run deps:install
- একটি নতুন চিত্র তৈরি করুন এবং ভলিউম একটি নতুন লক ফাইল মাউন্ট করুন
- এটি মূলত করছে
docker compose build
এবং চলমানbin/uv-install
একটি ধারকটির অভ্যন্তরে যার একটি ভলিউম মাউন্ট রয়েছে তাই আপনার হোস্টের লক ফাইলটি আপডেট হয়
./run deps:install --no-build
- এটি বিল্ডিং এড়িয়ে যাওয়া ব্যতীত উপরের মতো একই তবে এখনও একটি নতুন লক ফাইলটি মাউন্ট করে
./run uv (...)
- এটা করছে
docker compose exec web uv (...)
- যে কোনও কার্যকর করুন
uv
কমান্ড আপনি চান, উদাহরণস্বরূপ:uv add mypackage --no-sync
- আপনার আপডেট
pyproject.toml
ফাইল এবং লক ফাইল তবে এটি ইনস্টল করে না- তাহলে আপনি দৌড়াতে পারেন
./run deps:install
- তাহলে আপনি দৌড়াতে পারেন
- এটি হয় একটি নতুন নির্ভরতা যুক্ত করবে বা একটি বিদ্যমান একটি আপডেট করবে
- যোগ করার জন্য, যদি আপনি বাদ দেন
==X.X.X
এটি বর্তমান সর্বশেষ সংস্করণ হিসাবে যুক্ত করবে>=X.X.X
মধ্যেpyproject.toml
- আপডেট করার জন্য, অন্তর্ভুক্ত
==X.X.X
সুতরাংpyproject.toml
আপডেট হয়
- যোগ করার জন্য, যদি আপনি বাদ দেন
- আপনার আপডেট
uv remove mypackage --no-sync
- এটি প্যাকেজটি সরিয়ে ব্যতীত উপরের মত একই
- এটা করছে
./run uv:outdated
- এটা করছে
docker compose exec web uv tree --outdated --depth 1
- পুরানো নির্ভরতার একটি তালিকা দেখান যাতে আপনি কী আপডেট করবেন তা জানেন
- এটা করছে
নীচের ভিডিওটি একসাথে পৃথক হয়ে যায় এবং উপরের কয়েকটি কমান্ড চালায়।
#
ডেমো ভিডিও
https://www.youtube.com/watch?v=pl-qft1ykek
টাইমস্ট্যাম্পস
- 0:17 – টিএল; ইউভিতে ডিআর
- 1:36 – প্রয়োজনীয়তা প্রতিস্থাপন করতে pyproject.toml.txt
- 3:05 – ডকারফিল: ইউভি ইনস্টল করুন
- 3:56 – ডকারফিল: নির্ভরতা ফাইল
- 4:50 – ডকারফিল: এনভ ভেরস
- 6:46 – ডকারফিল: ইউভি লক / সিঙ্ক
- 10:22 – দ্রুত পুনরুদ্ধার
- 10:44 – একটি প্যাকেজ আপডেট করার এক উপায়
- 11:41 – পুরানো প্যাকেজগুলির জন্য চেক করা হচ্ছে
- 13:29 – প্যাকেজগুলি যুক্ত বা আপডেট করতে ইউভি ব্যবহার করে
- 15:27 – এর সর্বশেষ সংস্করণে একটি নতুন প্যাকেজ যুক্ত করা হচ্ছে
- 16:12 – একটি প্যাকেজ অপসারণ
আপনি কি ইউভিতে স্যুইচ করেছেন, এটি কীভাবে গেল? আমাকে নীচে জানান।
আপনার মত, আমি আমার ইনবক্সের সুপার প্রতিরক্ষামূলক, তাই স্প্যামড হওয়ার বিষয়ে চিন্তা করবেন না। আপনি প্রতি বছর কয়েকটি ইমেল আশা করতে পারেন (বেশিরভাগ ক্ষেত্রে), এবং আপনি যে কোনও সময় সাবস্ক্রাইব 1 ক্লিক করতে পারেন। আপনি আরও কি পাবেন দেখুন।