আমার গিট রিপোজিটরির ভিতরে আমার ভার্চুয়ালেনভ ডিরেক্টরি থাকা কি খারাপ?


285

আমি জ্যাঙ্গো ওয়েব অ্যাপ্লিকেশনটির জন্য ভার্চুয়ালেনভ রাখার বিষয়ে ভাবছি যা আমি অ্যাপটির জন্য আমার গিট ভাণ্ডারের ভিতরে তৈরি করছি। এটি স্থাপনের সহজ এবং সহজ রাখার একটি সহজ উপায় বলে মনে হয়। আমার এটা না করার কোনও কারণ আছে?

উত্তর:


302

আমি pip freezeআমার প্রয়োজন মতো প্যাকেজগুলি একটি requirements.txtফাইলে প্রবেশ করতে এবং এটি আমার সংগ্রহস্থলে যুক্ত করতে ব্যবহার করি। আমি কেন আপনি পুরো ভার্চুয়ালেনভ সংরক্ষণ করতে চাইবেন তার একটি উপায় চিন্তা করার চেষ্টা করেছি, কিন্তু আমি পারিনি।


81
আপনি আপনার রেপোতে অপ্রয়োজনীয় স্থান সংরক্ষণ করতে পারেন এবং এখনও একটি কমান্ডে একটি নতুন সার্ভারে স্থাপন করতে পারেন: virtualenv --no-سائٹ-প্যাকেজগুলি - .dv বিতরণ করুন & উত্স।
রায়ানব্রেডি

2
আমি আপনাকে এই প্রশ্নের উত্তর দিচ্ছি, যেহেতু এটি সম্ভবত "সেরা অনুশীলন" এবং আপনি প্রথমে এটি অফার করেছিলেন। প্রত্যেকেই উল্লেখ করেছেন এমন কিছু সমস্যার সমাধান আমি অবশ্যই করেছি। আমি অনুমান করছি যে আপনি নিজেরাই যে সমস্ত পরামর্শ দিয়ে যাচ্ছেন এবং পাইপ এবং প্রয়োজনীয় ফাইলগুলি ব্যবহার করার আগে আমি এটি করার আগে আমি নিজেকে অন্য দিনটিতে বিশৃঙ্খলা দেই। আপনার সাহায্যের জন্য ধন্যবাদ!
লাইল প্র্যাট

11
যদি আপনি, pip install mysql-pythonএকটি 64 বিট মেশিনে বলুন, এবং তারপরে 32 বিট মেশিনযুক্ত কেউ এটি ব্যবহার করার চেষ্টা করেন, এটি কার্যকর হবে না। পারফরম্যান্স বাড়ানোর জন্য এটি অনেক পাইথন মডিউলগুলির মতো একটি সি মডিউল ব্যবহার করে। আমি ধারণা করি উইন্ডোজ-> লিনাক্সও কাজ করবে না।
ম্যাট উইলিয়ামসন

7
কেবলমাত্র একটি মন্তব্য: আমরা অতীতে কিছুটা পেয়েছি কারণ কোনওভাবে লাইব্রেরিগুলি পাইপ (সংস্করণটি খুব পুরানো) থেকে অনুপলব্ধ হয়ে যাচ্ছে, সাইটটি ডাউন থাকাকালীন একটি আপগ্রেডকে বাধ্য করেছিল। সুতরাং ... আমি এখন আর কখনও এই কাজ pip freezeকরতে ভরসা করব না । সমস্যাটি হ'ল আপনার জোরপূর্বক আপগ্রেড পুনরায় প্রচারের সময়, কেউ এর জন্য অর্থ প্রদান করে না এবং মধ্যবর্তী আপগ্রেডগুলির জন্য ("সেরা অনুশীলন" রক্ষণাবেক্ষণ) কেউও করেন না।
চুক্তি বলছে আমি

5
@RayanBrady মন্তব্যে নোট: দ্য --distributeএবং --setuptoolsবিকল্প এখন নো অপ হয়। (বিতরণ করুন, এটি সেটআপটুলগুলির একটি কাঁটাচামচি অনেক আগেই একত্রীকরণ করা হয়েছিল)। --no-site-packages
সম্মানিত

49

গিটের অভ্যন্তরে ভার্চুয়ালেনভ ডিরেক্টরিটি সংরক্ষণ করা, যেমন আপনি উল্লেখ করেছেন, কেবল একটি গিট ক্লোন করে (আরও অ্যাপাচি / মোড_উজগি ইনস্টল ও কনফিগার করে) পুরো অ্যাপটি স্থাপন করতে পারবেন। এই পদ্ধতির একটি সম্ভাব্য উল্লেখযোগ্য সমস্যা হ'ল লিনাক্সে ভেনভের অ্যাক্টিভেট, জ্যাঙ্গো-অ্যাডমিনি.পি, ইজি_ইনস্টল এবং পাইপ স্ক্রিপ্টগুলিতে সম্পূর্ণ পাথ হার্ড-কোডড হয়। এর অর্থ হ'ল যদি আপনি কোনও ভিন্ন পাথ ব্যবহার করতে চান, একই সার্ভারে একাধিক ভার্চুয়াল হোস্ট চালাতে চান তবে আপনার ভার্চুয়ালভ পুরোপুরি কাজ করবে না। আমি মনে করি ওয়েবসাইটগুলি প্রকৃতপক্ষে সেই ফাইলগুলিতে ভুল পথে কাজ করতে পারে তবে পরের বার আপনি যখন পাইপ চালানোর চেষ্টা করবেন তখন আপনার সমস্যা হবে।

ইতিমধ্যে প্রদত্ত সমাধানটি হ'ল গিটটিতে পর্যাপ্ত তথ্য সংরক্ষণ করা হবে যাতে মোতায়েনের সময় আপনি ভার্চুয়ালেনভ তৈরি করতে পারেন এবং প্রয়োজনীয় পাইপ ইনস্টল করতে পারেন। সাধারণত লোকেরা 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। ইতিমধ্যে উল্লিখিত হিসাবে এটি "কমিট স্প্যাম" হ্রাস করে।


4
নোট করুন - ডিস্ট্রিবিউট এখন অবচয় করা হয়েছে (কমপক্ষে 15.1.0 এ): --distribute DEPRECATED. Retained only for backward compatibility. This option has no effect.
অ্যান্থনি সি

1
--no-site-packages15.1.0 এও হ্রাস করা হয়েছে, এখন এটি ডিফল্ট।
সিজেএস

35

আমি পাইক্রিপ্টো-র মতো পরিবেশের উপর নির্ভর করে পৃথকভাবে সংকলিত লাইব্রেরিগুলি ব্যবহার শুরু না করা পর্যন্ত আমি এটিই করতাম। আমার পাইক্রিপ্টো ম্যাক উগুন্টুতে সাইগউইন কাজ করবে না on

সংগ্রহস্থল পরিচালনা করার জন্য এটি চূড়ান্ত দুঃস্বপ্নে পরিণত হয়।

যে কোনও উপায়ে পাইপ হিমশীতল এবং প্রয়োজনীয়তার ফাইলটি সমস্ত গিটের চেয়ে বেশি পরিচালনা করা আমার কাছে সহজ মনে হয়েছিল। আপনি যে লাইব্রেরিগুলি আপডেট হওয়ার সাথে সাথে হাজার হাজার ফাইলের প্রতিশ্রুতি স্প্যাম এড়াতে পারবেন সেহেতু এটি আরও পরিষ্কার ...


হুম। বিভিন্ন পরিবেশে স্টাফকে আলাদাভাবে সংকলন করাতে আমার অবশ্যই সমস্যা হবে না। আমি অনুমান করি এটি কেবল কমিট স্প্যাম এড়াতে এটি না করার উপযুক্ত।
লাইল প্র্যাট

@ লাইলপ্রেট: আমি বিপরীত বলে মনে করি: পাইক্রিপ্টো বা পিআইএল-এর মতো দুর্দান্ত সরঞ্জামগুলি নিয়ে সমস্যা এড়াতে কেবল পুরাতনগুলিতে পুরো ভার্চুয়ালেনভকে অন্তর্ভুক্ত করা ভাল নয়।
টেডেক

17

আমি মনে করি যে প্রধান সমস্যাগুলি হ'ল এটি হ'ল ভার্চুয়ালেনভ অন্য লোকদের দ্বারা ব্যবহারযোগ্য নাও হতে পারে। কারণ হ'ল এটি সর্বদা পরম পাথ ব্যবহার করে uses সুতরাং যদি আপনি ভার্চুয়ালেনভ উদাহরণস্বরূপ ছিলেন /home/lyle/myenv/তবে এই সংগ্রহস্থলটি ব্যবহার করে অন্য সমস্ত লোকের ক্ষেত্রে এটি একই রকম হবে (এটি অবশ্যই একই পরম পথ হতে হবে)। আপনি নিজের মতো একই ডিরেক্টরি কাঠামো ব্যবহার করে লোকদের ধরে নিতে পারবেন না।

সর্বোত্তম অনুশীলন হ'ল প্রত্যেকে নিজের পরিবেশ স্থাপন করছে (এটি ভ্যুচুয়ালেনভের সাথে থাকুক বা না থাকুক) এবং সেখানে লাইব্রেরি ইনস্টল করছে। এটি আপনাকে বিভিন্ন প্ল্যাটফর্মগুলিতে (লিনাক্স / উইন্ডোজ / ম্যাক) আরও কোড ব্যবহারের যোগ্য করে তোলে, কারণ ভার্চুয়ালেনভ প্রতিটি ক্ষেত্রে পৃথকভাবে ইনস্টল করা আছে।


এসসিএম-এ ভার্চুয়ালেনভ রাখার পক্ষে কেন এটি খারাপ ধারণা, এটি ঠিক আছে তবে মেশিন জুড়ে একই পরিবেশ পুনরুদ্ধারের কিছু উপায় থাকার কারণেই @ আরজে ব্র্যাডির পরামর্শ বা ইভেন্ট বুটস্ট্র্যাপ.পি স্ক্রিপ্টের মতো কিছু বিবেচনা করা মূল্যবান a গুরুতর প্রয়োজন অন্য লোকের সাথে কাজ করার সময়।
ig0774

আপনি যে সমস্যাটি উল্লেখ করেছেন তা আমার পরিস্থিতি হুবহু সমস্যা হতে পারে তা আমি সত্যই নিশ্চিত নই। আমার জ্যাঙ্গো অ্যাপ্লিকেশনটিতে একটি .wsgi ফাইল রয়েছে যা এটি নির্ধারণ করে যেখানে ভ্যাচুয়ালেনভ তার অবস্থানের সাথে সম্পর্কিত (2 ডিরেক্টরি আপ '../../env')) সুতরাং, আমার দৃশ্যে, নিখুঁত পথের সমস্যাটি আমাকে নেতিবাচকভাবে প্রভাবিত করে না ... তাই না?
লাইল প্র্যাট

আপনি যদি সর্বদা ডাব্লুএসজিআই দিয়ে আপনার অ্যাপ্লিকেশন চালনা করেন তবে আপনি এটিকে থেকে দূরে সরে যেতে পারেন। আপনি যদি ডেভলপমেন্ট সার্ভারটি (মাধ্যমে manage.py) ব্যবহার করেন তবে আপনি অবশ্যই সমস্যার জন্য চলে যাবেন।
টর্স্টেন এঞ্জেলব্রেচট

3

আমি ডেভিড সিকমিলারের উত্তরটি যা কিছুটা বেশি অটোমেশন দিয়ে ব্যবহার করি তা ব্যবহার করি । আমি আমার প্রকল্পের শীর্ষ স্তরে 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; }এই লিপিটি উত্সাহিতের বিপরীতে কার্যকর করা হচ্ছে কিনা তা সনাক্ত করতে আমাকে প্রথম লাইনটি পরিবর্তন করতে হয়েছিল
ক্রিস স্নো

3

কোনও পরিবেশ-নির্ভর উপাদান বা রেপো ব্যবহারের অন্যতম মূল বিষয় হিসাবে আপনার রেপগুলিতে সেটিংটি অন্তর্ভুক্ত করা ভাল ধারণা নয়, সম্ভবত এটি অন্যান্য বিকাশকারীদের সাথে ভাগ করে নেওয়া। এখানে আমি কীভাবে আমার উইন্ডোজ পিসিতে আমার বিকাশের পরিবেশ সেটআপ করব (বলুন, উইন 10)।

  1. পাইচার্ম খুলুন এবং প্রথম পৃষ্ঠায়, আপনার উত্স কন্ট্রোল সিস্টেম থেকে প্রকল্পটি পরীক্ষা করতে বেছে নিন (আমার ক্ষেত্রে আমি গিথুব ব্যবহার করছি)

  2. পাইচার্মে, সেটিংসে নেভিগেট করুন এবং "প্রকল্প ইন্টারপ্রেটার" চয়ন করুন এবং একটি নতুন ভার্চুয়াল পরিবেশ যুক্ত করার বিকল্পটি চয়ন করুন, আপনি এটিকে "ভেনভ" বলতে পারেন।

  3. সিটিতে অবস্থিত বেস পাইথন ইন্টারপ্রেটারটি বেছে নিন: \ ব্যবহারকারী {ব্যবহারকারী \ অ্যাপডাটা \ স্থানীয় \ প্রোগ্রামগুলি th পাইথন \ পাইথন 36 (আপনি যেটি ইনস্টল করেছেন তার উপর ভিত্তি করে পাইথনের উপযুক্ত সংস্করণটি চয়ন করেছেন তা নিশ্চিত করুন)

  4. নোট করুন যে পাইচার্ম নতুন ভার্চুয়াল পরিবেশ তৈরি করবে এবং পাইথন বাইনারিগুলি এবং আপনার প্রকল্পের ফোল্ডারের অভ্যন্তরে আপনার ভেন্ট ফোল্ডারের নীচে প্রয়োজনীয় লাইব্রেরিগুলি অনুলিপি করবে।

  5. আপনার প্রকল্পের কঙ্কালটি পুনর্নির্মাণ / রিফ্রেশ করার জন্য পাইচার্মকে এটির স্ক্যানিংটি সম্পূর্ণ করতে দিন

  6. আপনার গিট ইন্টারঅ্যাকশনগুলি থেকে ভেনভ ফোল্ডারটি বাদ দিন ( আপনার প্রকল্পের ফোল্ডারে ভিজিভ। .gitignore ফাইলটিতে যুক্ত করুন)

বোনাস: আপনি যদি চান যে লোকেরা সহজেই (ভাল, প্রায় সহজেই) আপনার সফ্টওয়্যারটির সমস্ত লাইব্রেরি ইনস্টল করে, আপনি ব্যবহার করতে পারেন

pip freeze > requirements.txt

এবং নির্দেশটি আপনার গিটকে রেখে দিন যাতে লোকেরা সমস্ত প্রয়োজনীয় লাইব্রেরি একবারে ডাউনলোড করতে নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারে।

pip install -r requirements.txt 

2

আপনার অ্যাপ্লিকেশনটি কোন অপারেটিং সিস্টেম চালু থাকবে তা যদি আপনি জানেন তবে আমি প্রতিটি সিস্টেমের জন্য একটি করে ভার্চুয়ালেনভ তৈরি করব এবং এটি আমার ভাণ্ডারে অন্তর্ভুক্ত করব। তারপরে আমি আমার অ্যাপ্লিকেশনটিকে কোন সিস্টেমে চলছে তা সনাক্ত করতে এবং সংশ্লিষ্ট ভার্চুয়ালেনভ ব্যবহার করতে চাই।

সিস্টেমটি উদাহরণস্বরূপ প্ল্যাটফর্ম মডিউলটি ব্যবহার করে চিহ্নিত করা যেতে পারে ।

প্রকৃতপক্ষে, আমি যা লিখেছি তা অভ্যন্তরীণ অ্যাপ্লিকেশনটির সাথে আমি এটি করি এবং যার প্রয়োজনে আমি দ্রুত একটি নতুন সিস্টেমের ভার্চুয়ালেনভ যুক্ত করতে পারি। এইভাবে, আমাকে সেই পাইপটির উপর নির্ভর করতে হবে না যে আমার অ্যাপ্লিকেশনটির জন্য প্রয়োজনীয় সফ্টওয়্যারটি সাফল্যের সাথে ডাউনলোড করতে সক্ষম হবে। আমি যে উদাহরণস্বরূপ সাইসকপজি 2 ব্যবহার করি তা সংকলন সম্পর্কেও আমার চিন্তা করতে হবে না ।

আপনার অ্যাপ্লিকেশনটি কোন অপারেটিং সিস্টেমটি চলতে পারে তা যদি আপনি না জানেন তবে pip freezeঅন্যান্য উত্তরগুলিতে প্রস্তাবিত হিসাবে আপনি সম্ভবত ব্যবহার করা ভাল ।


0

আমি মনে করি রিপোজিটরি ফোল্ডারের অভ্যন্তরে কোনও পথে ভার্চুয়াল পরিবেশ ইনস্টল করা সবচেয়ে ভাল, পরিবেশের জন্য নিবেদিত একটি উপ-ডিরেক্টরি ব্যবহার করা ভাল inc ফোল্ডার, ভাল যে আমি প্রকল্পটি তার সর্বশেষ সংস্করণ গিথুবে সংরক্ষণ করেছি।

হয় স্বয়ংক্রিয় ইনস্টলার, বা ডকুমেন্টেশনের মাধ্যমে ভার্চুয়ালেনভ পাথকে আপেক্ষিক পথ হিসাবে চিহ্নিত করা উচিত, অন্য লোকের সাথে প্রকল্পটি ভাগ করে নেওয়ার সময় আপনি সমস্যার মধ্যে পড়বেন না। প্যাকেজগুলি সম্পর্কে, ব্যবহৃত প্যাকেজগুলি সংরক্ষণ করা উচিত pip freeze -r requirements.txt


-1

যদি আপনি কেবল বিকাশ env সেট আপ করেন, তবে পিপ ফ্রিজে ফাইল, কাজটি ব্যবহার করুন যা গিট রেপোকে পরিষ্কার করে।

তারপরে যদি প্রোডাক্ট ডিপ্লোয়মেন্ট করে থাকে তবে পুরো ভেন্ট ফোল্ডারটি চেক ইন করুন। এটি আপনার মোতায়েনকে আরও প্রজননযোগ্য করে তুলবে, সেইসব লাইবএক্সএক্সএক্স-ডেভ প্যাকেজগুলির প্রয়োজন হবে না এবং ইন্টারনেট সমস্যাগুলি এড়ানো হবে।

সুতরাং দুটি ভান্ডার আছে। আপনার মূল উত্স কোডের জন্য একটি, এতে একটি প্রয়োজনীয়তা রয়েছে t টেক্সট। এবং একটি এনভিও রেপো, এতে পুরো ভেন্ট ফোল্ডার থাকে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.