আমি জ্যাঙ্গো ওয়েব অ্যাপ্লিকেশনটির জন্য ভার্চুয়ালেনভ রাখার বিষয়ে ভাবছি যা আমি অ্যাপটির জন্য আমার গিট ভাণ্ডারের ভিতরে তৈরি করছি। এটি স্থাপনের সহজ এবং সহজ রাখার একটি সহজ উপায় বলে মনে হয়। আমার এটা না করার কোনও কারণ আছে?
আমি জ্যাঙ্গো ওয়েব অ্যাপ্লিকেশনটির জন্য ভার্চুয়ালেনভ রাখার বিষয়ে ভাবছি যা আমি অ্যাপটির জন্য আমার গিট ভাণ্ডারের ভিতরে তৈরি করছি। এটি স্থাপনের সহজ এবং সহজ রাখার একটি সহজ উপায় বলে মনে হয়। আমার এটা না করার কোনও কারণ আছে?
উত্তর:
আমি pip freeze
আমার প্রয়োজন মতো প্যাকেজগুলি একটি requirements.txt
ফাইলে প্রবেশ করতে এবং এটি আমার সংগ্রহস্থলে যুক্ত করতে ব্যবহার করি। আমি কেন আপনি পুরো ভার্চুয়ালেনভ সংরক্ষণ করতে চাইবেন তার একটি উপায় চিন্তা করার চেষ্টা করেছি, কিন্তু আমি পারিনি।
pip install mysql-python
একটি 64 বিট মেশিনে বলুন, এবং তারপরে 32 বিট মেশিনযুক্ত কেউ এটি ব্যবহার করার চেষ্টা করেন, এটি কার্যকর হবে না। পারফরম্যান্স বাড়ানোর জন্য এটি অনেক পাইথন মডিউলগুলির মতো একটি সি মডিউল ব্যবহার করে। আমি ধারণা করি উইন্ডোজ-> লিনাক্সও কাজ করবে না।
pip freeze
করতে ভরসা করব না । সমস্যাটি হ'ল আপনার জোরপূর্বক আপগ্রেড পুনরায় প্রচারের সময়, কেউ এর জন্য অর্থ প্রদান করে না এবং মধ্যবর্তী আপগ্রেডগুলির জন্য ("সেরা অনুশীলন" রক্ষণাবেক্ষণ) কেউও করেন না।
--distribute
এবং --setuptools
বিকল্প এখন নো অপ হয়। (বিতরণ করুন, এটি সেটআপটুলগুলির একটি কাঁটাচামচি অনেক আগেই একত্রীকরণ করা হয়েছিল)। --no-site-packages
গিটের অভ্যন্তরে ভার্চুয়ালেনভ ডিরেক্টরিটি সংরক্ষণ করা, যেমন আপনি উল্লেখ করেছেন, কেবল একটি গিট ক্লোন করে (আরও অ্যাপাচি / মোড_উজগি ইনস্টল ও কনফিগার করে) পুরো অ্যাপটি স্থাপন করতে পারবেন। এই পদ্ধতির একটি সম্ভাব্য উল্লেখযোগ্য সমস্যা হ'ল লিনাক্সে ভেনভের অ্যাক্টিভেট, জ্যাঙ্গো-অ্যাডমিনি.পি, ইজি_ইনস্টল এবং পাইপ স্ক্রিপ্টগুলিতে সম্পূর্ণ পাথ হার্ড-কোডড হয়। এর অর্থ হ'ল যদি আপনি কোনও ভিন্ন পাথ ব্যবহার করতে চান, একই সার্ভারে একাধিক ভার্চুয়াল হোস্ট চালাতে চান তবে আপনার ভার্চুয়ালভ পুরোপুরি কাজ করবে না। আমি মনে করি ওয়েবসাইটগুলি প্রকৃতপক্ষে সেই ফাইলগুলিতে ভুল পথে কাজ করতে পারে তবে পরের বার আপনি যখন পাইপ চালানোর চেষ্টা করবেন তখন আপনার সমস্যা হবে।
ইতিমধ্যে প্রদত্ত সমাধানটি হ'ল গিটটিতে পর্যাপ্ত তথ্য সংরক্ষণ করা হবে যাতে মোতায়েনের সময় আপনি ভার্চুয়ালেনভ তৈরি করতে পারেন এবং প্রয়োজনীয় পাইপ ইনস্টল করতে পারেন। সাধারণত লোকেরা pip freeze
তালিকাটি পেতে দৌড়াদৌড়ি করে এটি প্রয়োজনীয়তা.টিএসটিএস নামের একটি ফাইলে সংরক্ষণ করে store এটি দিয়ে বোঝা যায় pip install -r requirements.txt
। রায়ানব্রেডি ইতিমধ্যে দেখিয়েছে আপনি কীভাবে একক লাইনে মোতায়েনের স্টেটমেন্টগুলি স্ট্রিং করতে পারেন:
# before 15.1.0
virtualenv --no-site-packages --distribute .env &&\
source .env/bin/activate &&\
pip install -r requirements.txt
# after deprecation of some arguments in 15.1.0
virtualenv .env && source .env/bin/activate && pip install -r requirements.txt
ব্যক্তিগতভাবে, আমি এগুলি কেবল শিট স্ক্রিপ্টে রেখেছি যা আমি গিট ক্লোন বা গিট টান পরে চালাচ্ছি।
ভার্চুয়ালেনভ ডিরেক্টরিটি সংরক্ষণ করা পিপ আপগ্রেডগুলি পরিচালনা করতে কিছুটা জটিল করে তোলে কারণ আপগ্রেড হওয়ার ফলে ফাইলগুলি আপনাকে ম্যানুয়ালি যোগ / অপসারণ করতে এবং প্রতিশ্রুতিবদ্ধ করতে হবে। প্রয়োজনীয়তা.টিএসটিএল ফাইলের সাহায্যে আপনি কেবল প্রয়োজনীয় পংক্তাগুলিতে পরিবর্তন করুন xt txt এবং পুনরায় রান করুন pip install -r requirements.txt
। ইতিমধ্যে উল্লিখিত হিসাবে এটি "কমিট স্প্যাম" হ্রাস করে।
--distribute DEPRECATED. Retained only for backward compatibility. This option has no effect.
--no-site-packages
15.1.0 এও হ্রাস করা হয়েছে, এখন এটি ডিফল্ট।
আমি পাইক্রিপ্টো-র মতো পরিবেশের উপর নির্ভর করে পৃথকভাবে সংকলিত লাইব্রেরিগুলি ব্যবহার শুরু না করা পর্যন্ত আমি এটিই করতাম। আমার পাইক্রিপ্টো ম্যাক উগুন্টুতে সাইগউইন কাজ করবে না on
সংগ্রহস্থল পরিচালনা করার জন্য এটি চূড়ান্ত দুঃস্বপ্নে পরিণত হয়।
যে কোনও উপায়ে পাইপ হিমশীতল এবং প্রয়োজনীয়তার ফাইলটি সমস্ত গিটের চেয়ে বেশি পরিচালনা করা আমার কাছে সহজ মনে হয়েছিল। আপনি যে লাইব্রেরিগুলি আপডেট হওয়ার সাথে সাথে হাজার হাজার ফাইলের প্রতিশ্রুতি স্প্যাম এড়াতে পারবেন সেহেতু এটি আরও পরিষ্কার ...
আমি মনে করি যে প্রধান সমস্যাগুলি হ'ল এটি হ'ল ভার্চুয়ালেনভ অন্য লোকদের দ্বারা ব্যবহারযোগ্য নাও হতে পারে। কারণ হ'ল এটি সর্বদা পরম পাথ ব্যবহার করে uses সুতরাং যদি আপনি ভার্চুয়ালেনভ উদাহরণস্বরূপ ছিলেন /home/lyle/myenv/
তবে এই সংগ্রহস্থলটি ব্যবহার করে অন্য সমস্ত লোকের ক্ষেত্রে এটি একই রকম হবে (এটি অবশ্যই একই পরম পথ হতে হবে)। আপনি নিজের মতো একই ডিরেক্টরি কাঠামো ব্যবহার করে লোকদের ধরে নিতে পারবেন না।
সর্বোত্তম অনুশীলন হ'ল প্রত্যেকে নিজের পরিবেশ স্থাপন করছে (এটি ভ্যুচুয়ালেনভের সাথে থাকুক বা না থাকুক) এবং সেখানে লাইব্রেরি ইনস্টল করছে। এটি আপনাকে বিভিন্ন প্ল্যাটফর্মগুলিতে (লিনাক্স / উইন্ডোজ / ম্যাক) আরও কোড ব্যবহারের যোগ্য করে তোলে, কারণ ভার্চুয়ালেনভ প্রতিটি ক্ষেত্রে পৃথকভাবে ইনস্টল করা আছে।
manage.py
) ব্যবহার করেন তবে আপনি অবশ্যই সমস্যার জন্য চলে যাবেন।
আমি ডেভিড সিকমিলারের উত্তরটি যা কিছুটা বেশি অটোমেশন দিয়ে ব্যবহার করি তা ব্যবহার করি । আমি আমার প্রকল্পের শীর্ষ স্তরে activate
নীচের বিষয়বস্তুগুলির সাথে নামযুক্ত একটি (নির্বাহযোগ্য নয়) ফাইল তৈরি করি :
[ -n "$BASH_SOURCE" ] \
|| { echo 1>&2 "source (.) this with Bash."; exit 2; }
(
cd "$(dirname "$BASH_SOURCE")"
[ -d .build/virtualenv ] || {
virtualenv .build/virtualenv
. .build/virtualenv/bin/activate
pip install -r requirements.txt
}
)
. "$(dirname "$BASH_SOURCE")/.build/virtualenv/bin/activate"
(ডেভিডের উত্তর অনুসারে, এটি ধরে নিয়েছে যে আপনি pip freeze > requirements.txt
আপনার প্রয়োজনীয়তার তালিকাটি আপ টু ডেট রাখবেন))
উপরেরটি সাধারণ ধারণা দেয়; আমি সাধারণত যে আসল অ্যাক্টিভেট স্ক্রিপ্ট ( ডকুমেন্টেশন ) ব্যবহার করি তা হ'ল কিছুটা পরিশীলিত, যখন একটি -q
(শান্ত) বিকল্প দেওয়া হয়, python
যখন python3
উপলভ্য হয় না ইত্যাদি ব্যবহার করে etc.
এরপরে এটি বর্তমান যে কোনও কার্যনির্বাহী ডিরেক্টরি থেকে সংগ্রহ করা যেতে পারে এবং যথাযথভাবে সক্রিয় হবে, প্রয়োজনে প্রথমে ভার্চুয়াল পরিবেশ স্থাপন করুন। আমার শীর্ষ-স্তরের পরীক্ষার স্ক্রিপ্টটির সাধারণত এই লাইনগুলির সাথে কোড থাকে যাতে এটি বিকাশকারীকে প্রথমে সক্রিয় করা ছাড়া চালানো যায়:
cd "$(dirname "$0")"
[[ $VIRTUAL_ENV = $(pwd -P) ]] || . ./activate
সোর্সিং ./activate
নয় activate
, এখানে গুরুত্বপূর্ণ কারণ পরবর্তী activate
ডিরেক্টরিগুলি এটি বর্তমান ডিরেক্টরিটিতে খুঁজে পাওয়ার আগেই আপনার পথে অন্য যে কোনও সন্ধান করবে।
[[ $_ != $0 ]] || { echo 1>&2 "source (.) this script with Bash."; exit 2; }
এই লিপিটি উত্সাহিতের বিপরীতে কার্যকর করা হচ্ছে কিনা তা সনাক্ত করতে আমাকে প্রথম লাইনটি পরিবর্তন করতে হয়েছিল
কোনও পরিবেশ-নির্ভর উপাদান বা রেপো ব্যবহারের অন্যতম মূল বিষয় হিসাবে আপনার রেপগুলিতে সেটিংটি অন্তর্ভুক্ত করা ভাল ধারণা নয়, সম্ভবত এটি অন্যান্য বিকাশকারীদের সাথে ভাগ করে নেওয়া। এখানে আমি কীভাবে আমার উইন্ডোজ পিসিতে আমার বিকাশের পরিবেশ সেটআপ করব (বলুন, উইন 10)।
পাইচার্ম খুলুন এবং প্রথম পৃষ্ঠায়, আপনার উত্স কন্ট্রোল সিস্টেম থেকে প্রকল্পটি পরীক্ষা করতে বেছে নিন (আমার ক্ষেত্রে আমি গিথুব ব্যবহার করছি)
পাইচার্মে, সেটিংসে নেভিগেট করুন এবং "প্রকল্প ইন্টারপ্রেটার" চয়ন করুন এবং একটি নতুন ভার্চুয়াল পরিবেশ যুক্ত করার বিকল্পটি চয়ন করুন, আপনি এটিকে "ভেনভ" বলতে পারেন।
সিটিতে অবস্থিত বেস পাইথন ইন্টারপ্রেটারটি বেছে নিন: \ ব্যবহারকারী {ব্যবহারকারী \ অ্যাপডাটা \ স্থানীয় \ প্রোগ্রামগুলি th পাইথন \ পাইথন 36 (আপনি যেটি ইনস্টল করেছেন তার উপর ভিত্তি করে পাইথনের উপযুক্ত সংস্করণটি চয়ন করেছেন তা নিশ্চিত করুন)
নোট করুন যে পাইচার্ম নতুন ভার্চুয়াল পরিবেশ তৈরি করবে এবং পাইথন বাইনারিগুলি এবং আপনার প্রকল্পের ফোল্ডারের অভ্যন্তরে আপনার ভেন্ট ফোল্ডারের নীচে প্রয়োজনীয় লাইব্রেরিগুলি অনুলিপি করবে।
আপনার প্রকল্পের কঙ্কালটি পুনর্নির্মাণ / রিফ্রেশ করার জন্য পাইচার্মকে এটির স্ক্যানিংটি সম্পূর্ণ করতে দিন
আপনার গিট ইন্টারঅ্যাকশনগুলি থেকে ভেনভ ফোল্ডারটি বাদ দিন ( আপনার প্রকল্পের ফোল্ডারে ভিজিভ। .gitignore ফাইলটিতে যুক্ত করুন)
বোনাস: আপনি যদি চান যে লোকেরা সহজেই (ভাল, প্রায় সহজেই) আপনার সফ্টওয়্যারটির সমস্ত লাইব্রেরি ইনস্টল করে, আপনি ব্যবহার করতে পারেন
pip freeze > requirements.txt
এবং নির্দেশটি আপনার গিটকে রেখে দিন যাতে লোকেরা সমস্ত প্রয়োজনীয় লাইব্রেরি একবারে ডাউনলোড করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারে।
pip install -r requirements.txt
আপনার অ্যাপ্লিকেশনটি কোন অপারেটিং সিস্টেম চালু থাকবে তা যদি আপনি জানেন তবে আমি প্রতিটি সিস্টেমের জন্য একটি করে ভার্চুয়ালেনভ তৈরি করব এবং এটি আমার ভাণ্ডারে অন্তর্ভুক্ত করব। তারপরে আমি আমার অ্যাপ্লিকেশনটিকে কোন সিস্টেমে চলছে তা সনাক্ত করতে এবং সংশ্লিষ্ট ভার্চুয়ালেনভ ব্যবহার করতে চাই।
সিস্টেমটি উদাহরণস্বরূপ প্ল্যাটফর্ম মডিউলটি ব্যবহার করে চিহ্নিত করা যেতে পারে ।
প্রকৃতপক্ষে, আমি যা লিখেছি তা অভ্যন্তরীণ অ্যাপ্লিকেশনটির সাথে আমি এটি করি এবং যার প্রয়োজনে আমি দ্রুত একটি নতুন সিস্টেমের ভার্চুয়ালেনভ যুক্ত করতে পারি। এইভাবে, আমাকে সেই পাইপটির উপর নির্ভর করতে হবে না যে আমার অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় সফ্টওয়্যারটি সাফল্যের সাথে ডাউনলোড করতে সক্ষম হবে। আমি যে উদাহরণস্বরূপ সাইসকপজি 2 ব্যবহার করি তা সংকলন সম্পর্কেও আমার চিন্তা করতে হবে না ।
আপনার অ্যাপ্লিকেশনটি কোন অপারেটিং সিস্টেমটি চলতে পারে তা যদি আপনি না জানেন তবে pip freeze
অন্যান্য উত্তরগুলিতে প্রস্তাবিত হিসাবে আপনি সম্ভবত ব্যবহার করা ভাল ।
আমি মনে করি রিপোজিটরি ফোল্ডারের অভ্যন্তরে কোনও পথে ভার্চুয়াল পরিবেশ ইনস্টল করা সবচেয়ে ভাল, পরিবেশের জন্য নিবেদিত একটি উপ-ডিরেক্টরি ব্যবহার করা ভাল inc ফোল্ডার, ভাল যে আমি প্রকল্পটি তার সর্বশেষ সংস্করণ গিথুবে সংরক্ষণ করেছি।
হয় স্বয়ংক্রিয় ইনস্টলার, বা ডকুমেন্টেশনের মাধ্যমে ভার্চুয়ালেনভ পাথকে আপেক্ষিক পথ হিসাবে চিহ্নিত করা উচিত, অন্য লোকের সাথে প্রকল্পটি ভাগ করে নেওয়ার সময় আপনি সমস্যার মধ্যে পড়বেন না। প্যাকেজগুলি সম্পর্কে, ব্যবহৃত প্যাকেজগুলি সংরক্ষণ করা উচিত pip freeze -r requirements.txt
।
যদি আপনি কেবল বিকাশ env সেট আপ করেন, তবে পিপ ফ্রিজে ফাইল, কাজটি ব্যবহার করুন যা গিট রেপোকে পরিষ্কার করে।
তারপরে যদি প্রোডাক্ট ডিপ্লোয়মেন্ট করে থাকে তবে পুরো ভেন্ট ফোল্ডারটি চেক ইন করুন। এটি আপনার মোতায়েনকে আরও প্রজননযোগ্য করে তুলবে, সেইসব লাইবএক্সএক্সএক্স-ডেভ প্যাকেজগুলির প্রয়োজন হবে না এবং ইন্টারনেট সমস্যাগুলি এড়ানো হবে।
সুতরাং দুটি ভান্ডার আছে। আপনার মূল উত্স কোডের জন্য একটি, এতে একটি প্রয়োজনীয়তা রয়েছে t টেক্সট। এবং একটি এনভিও রেপো, এতে পুরো ভেন্ট ফোল্ডার থাকে।