কোন ভার্চুয়ালনেভে কাস্টম কোডটি কোথায় যায়?


107

ব্যবহারের সময় কোনটি কী ধরনের ডিরেক্টরি কাঠামো অনুসরণ করা উচিত virtualenv? উদাহরণস্বরূপ, যদি আমি একটি ডাব্লুএসজিআই অ্যাপ্লিকেশন তৈরি foobarকরতাম এবং একটি ভার্চুয়ালেনভ নামক একটি ডিরেক্টরি তৈরি করতাম তবে আমি একটি ডিরেক্টরি কাঠামো দিয়ে শুরু করব:

/foobar
  /bin
    {activate, activate.py, easy_install, python}
  /include
    {python2.6/...}
  /lib
    {python2.6/...}

এই পরিবেশটি তৈরি হয়ে গেলে, কোথায় তাদের নিজস্ব জায়গা থাকবে:

  • অজগর ফাইল?
  • স্ট্যাটিক ফাইল (চিত্র / ইত্যাদি)?
  • "কাস্টম" প্যাকেজগুলি যেমন অনলাইনে পাওয়া যায় তবে পনির-দোকানে পাওয়া যায় না?

সম্পর্ক virtualenv ডিরেক্টরি?

(ধরুন আমি ইতিমধ্যে জানি যে ভার্চুয়ালেনভ ডিরেক্টরিগুলি তাদের কোথায় যাবে ।)


8
@ জেকেপি: আমি একমত নই আপনি পাইথন অ্যাপ্লিকেশনটিকে কীভাবে বিন্যাস করেন তা কীভাবে আপনি সেই উন্নয়নের প্রয়োজনে সেই অ্যাপ্লিকেশনটিকে কোনও ভার্চুয়ালেনভের মধ্যে আবিষ্কার করেন তা থেকে আলাদা। এটি সম্পর্কিত, তবে একই নয়। সদৃশ হিসাবে বন্ধ করবেন না দয়া করে।
jcdyer

উত্তর:


90

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

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

সুতরাং, সাধারণভাবে, আমি মনে করি না যে প্রশ্নের সঠিক উত্তর আছে। এবং, একটি ভাল বিষয় virtualenvএটি বিভিন্ন ব্যবহারের বিভিন্ন ক্ষেত্রে সমর্থন করে: একটি সঠিক উপায় হওয়ার দরকার নেই।


8
একমত। আমি যা কিছু করি তার জন্য আমি ভার্চুয়ালেনভ ব্যবহার করি এবং আমি কখনই ভার্চুয়ালেনভ ডিরেক্টরিতে ফাইল রাখি না। ভার্টুয়ালেনভের আপনার প্রকল্পের কাঠামোর কোনও প্রভাব নেই; কেবল ভার্চুয়ালেনভকে সক্রিয় করুন (অথবা এর বিন / পাইথন ব্যবহার করুন) এবং আপনার ফাইলগুলি যেখানেই হোক না কেন আপনার কাজ করুন।
কার্ল মেয়ার

আমিও আন্তরিকভাবে একমত। শুধুমাত্র সময় আমি কি কখনো আমার virtualenv (আমি ব্যবহার ভিতরে কোন ফাইল স্পর্শ virtualenvwrapper) হল যখন আমি সম্পাদনা করতে চান postactivateএবং postdeactivateআঙ্গুলসমূহ।
থানা ব্রিমহল

এই প্রশ্নের অন্যান্য উত্তরে যেমন দেখা যায় ট্রেড অফসহ বিভিন্ন বিকল্পের কার্যকরী উদাহরণগুলির সাথে প্রশ্নটি আরও ভালভাবে পরিবেশন করা হবে।
andyfeller

2
এটা আপনার প্রকল্পের আলাদা রাখার জন্য ক্লিনার virtualenvডিরেক্টরির কিন্তু তুলনা virtualenvসিস্টেম পাইথন চাই, অকেজো কারণ উদ্দেশ্য virtualenvযাতে তারা ভিন্ন প্যাকেজ সংস্করণ এবং এমনকি পাইথন সংস্করণ ব্যবহার করতে পারেন (আমি এই লেখা হয়েছিল প্রাক উপলব্ধি ভাঙ্গা নির্ভরতা এবং বিছিন্ন প্রকল্প ঠিক হয় -python3)। অ্যাপস একটি ভাগ করার মঞ্জুরি দিয়েছে virtualenvব্যবহার করছে virtualenvযেন এটি সিস্টেমের পাইথন ছিল, অ্যাপ্লিকেশান একই সমস্যা virtualenv সমাধানের জন্য ডিজাইন করা হয়েছে প্রবন রেখে। There should be one obvious way to do it; যৌক্তিকভাবে এটি 1: 1 হওয়া উচিত
ডেভোস

@ নেড: কয়েকটি সেরা অনুশীলন অর্জন করার চেষ্টা করা হচ্ছে, তবে এটি এখনও অস্পষ্ট: আপনার যদি কয়েক ডজন প্রকল্প রয়েছে, যার প্রতিটি নিজস্ব ভ্যুচুয়ালেনভ রয়েছে তবে আপনি কোন প্রকল্পটি কোন ভার্চুয়ালেনভের সাথে ব্যবহার করছেন তা আপনি কীভাবে ট্র্যাক করবেন? আপনি যে ভার্চুয়ালেনভের সাথে এটি ব্যবহার করেন তার নামের সাথে প্রতিটি ফোল্ডারের মূলের মধ্যে ছোট ছোট শেল স্ক্রিপ্ট যুক্ত করুন?
সিসিপিজ্জা

57

আপনার যদি প্রতি কয়েকবার প্রায়শই কয়েকটি প্রকল্প হয় তবে প্রতিটির জন্য একটি নতুন ভার্চুয়ালেনভ তৈরি করা এবং আপনার প্যাকেজগুলি ঠিক ভিতরে রাখতে কোনও কিছুই আপনাকে থামায় না:

/foobar
  /bin
    {activate, activate.py, easy_install, python}
  /include
    {python2.6/...}
  /lib
    {python2.6/...}
  /mypackage1
    __init__.py
  /mypackage2
    __init__.py

এই পদ্ধতির সুবিধাটি হ'ল আপনি সর্বদা অভ্যন্তরীণ প্রকল্পের সাথে সম্পর্কিত সক্রিয় স্ক্রিপ্টটি সন্ধান করতে নিশ্চিত হন can

$ cd /foobar
$ source bin/activate
$ python 
>>> import mypackage1
>>>

যদি আপনি কিছুটা আরও সংগঠিত হওয়ার সিদ্ধান্ত নেন তবে আপনার সমস্ত ভার্চুয়াল্নিভকে একটি ফোল্ডারে রাখার বিষয়টি বিবেচনা করা উচিত এবং আপনি যে প্রকল্পে কাজ করছেন তার পরে তাদের প্রত্যেকের নাম দিন।

  /virtualenvs
    /foobar
      /bin
        {activate, activate.py, easy_install, python}
      /include
        {python2.6/...}
      /lib
        {python2.6/...}
  /foobar
    /mypackage1
      __init__.py
    /mypackage2
      __init__.py

যখন সমস্যাগুলি ভুল হয়ে যায় তখন আপনি সর্বদা নতুন ভার্চুয়ালেনভ দিয়ে শুরু করতে পারেন এবং আপনার প্রকল্পের ফাইলগুলি সুরক্ষিত থাকে।

আরেকটি সুবিধা হ'ল আপনার বেশ কয়েকটি প্রকল্প একই ভ্যুচুয়ালেনভ ব্যবহার করতে পারে, তাই আপনার যদি নির্ভরতা থাকে তবে আপনাকে একই ইনস্টলেশন বার বার করতে হবে না।

$ cd /foobar
$ source ../virtualenvs/foobar/bin/activate
$ python 
>>> import mypackage2
>>>

যে ব্যবহারকারীদের নিয়মিতভাবে ভার্চুয়ালেনভিগুলি সেট আপ করতে হবে এবং ছিঁড়ে ফেলতে হবে তাদের জন্য ভার্চুয়ালেনভ্রাপারকে দেখার অর্থ হবে।

http://pypi.python.org/pypi/virtualenvwrapper

ভার্চুয়ালেনভ্রাপার দিয়ে আপনি পারেন

* create and delete virtual environments

* organize virtual environments in a central place

* easily switch between environments

"Foo" এবং "বার" প্রকল্পগুলিতে কাজ করার সময় আপনার ভার্চুয়ালেন্সগুলি কোথায় তা নিয়ে আপনাকে আর চিন্তা করতে হবে না:

  /foo
    /mypackage1
      __init__.py
  /bar
    /mypackage2
      __init__.py

এভাবেই আপনি "foo" প্রকল্পে কাজ শুরু করবেন:

$ cd foo
$ workon
bar
foo
$ workon foo
(foo)$ python
>>> import mypackage1
>>>

তারপরে "বার" প্রজেক্টে স্যুইচ করা এর মতো সহজ:

$ cd ../bar
$ workon bar
(bar)$ python
>>> import mypackage2
>>>

বেশ সুন্দর, তাই না?


আমি ব্যবহার সম্পর্কে এই উত্তর সাথে দৃ strongly়ভাবে একমত virtualenvwrapper। এটি আপনাকে সমস্ত সুবিধা দেওয়ার পরেও খুব ভালভাবে বিমূর্তভাবে বিমূর্ত করে তোলে।
থানা ব্রিমহল

5
তবে ভার্চুয়াল পরিবেশের মধ্যে আপনার কোডটি প্রবেশের বিষয়ে দৃ strongly ়ভাবে একমত নয় । আপনি যদি ফাইল সিস্টেমে প্রকল্পটি "কাছাকাছি" রাখতে চান তবে প্রকল্পের মতো একটি venv/স্তরে একটি ডিরেক্টরি স্থাপন করুন BASE_DIR
রব গ্রান্ট

30

কারণ ভার্চুয়ালেনভগুলি স্থানান্তরযোগ্য নয়, আমার মতে আপনার প্রকল্পের ফাইলগুলিকে ভার্চুয়ালেনভ ডিরেক্টরিতে স্থাপন করা খারাপ অভ্যাস। ভার্চুয়ালেনভ নিজেই একটি উত্পাদিত বিকাশ / স্থাপনা শিল্পকলা (একটি .PYC ফাইলের মতো সাজানো), প্রকল্পের অংশ নয়; এটিকে উড়িয়ে দেওয়া এবং যে কোনও সময় এটি পুনরায় তৈরি করা সহজ হওয়া উচিত, বা নতুন স্থাপনার হোস্টে একটি নতুন তৈরি করা ইত্যাদি etc.

অনেক লোক প্রকৃতপক্ষে ভ্যুচুয়ালেভ্রাপার ব্যবহার করে , যা আপনার সচেতনতা থেকে প্রায় সম্পূর্ণরূপে প্রকৃত ভার্চুয়াল্নভগুলি সরিয়ে দেয় এবং ডিফল্টরূপে তাদের সবাইকে পাশাপাশি রাখে $ HOME / .virtualenvs এ।


এটি সম্পূর্ণরূপে সম্মত হ'ল এটি খারাপ অনুশীলন, এটি উল্লেখ করা দুর্দান্ত যে বিশেষ করে মোতায়েনের পরীক্ষা করা এবং অপ্রয়োজনীয় প্রয়োজনীয়তা প্যাকেজগুলি হুইটল করার জন্য এটি উড়িয়ে দেওয়া এবং পুনরায় তৈরি করা সহজ হওয়া উচিত। কেবল যুক্ত করতে চাই যে ভার্চুয়ালেনভ ব্যবহার করে স্থানান্তর সম্ভব eg উদাহরণস্বরূপ stackoverflow.com/a/6628642/1335793virtualenv --relocatable myvenv দেখুন কারণ আপনার অর্থ এই নয় যে আপনি হওয়া উচিত।
দাভোস

2

আপনি যদি আপনার প্রকল্পটি একটি setup.py , পিপ এটি সরাসরি সংস্করণ নিয়ন্ত্রণ থেকে আমদানি করতে পারে।

এরকম কিছু করুন:

$ virtualenv --no-site-packages myproject
$ . myproject/bin/activate
$ easy_install pip
$ pip install -e hg+http://bitbucket.org/owner/myproject#egg=proj

প্রকল্পটি এতে -eরাখবে myproject/src, তবে এর সাথে লিঙ্ক করবে myproject/lib/pythonX.X/site-packages/, সুতরাং আপনার যে কোনও পরিবর্তনগুলি তা তাত্ক্ষণিক মডিউলগুলিতে নেওয়া হবে যা এটি আপনার স্থানীয় থেকে আমদানি করে site-packages। দ্য#eggবিট পিপ কি নাম আপনি এটি আপনার জন্য তৈরি করে ডিম প্যাকেজে দিতে চান বলে।

আপনি যদি ব্যবহার না --no-site-packagesকরেন তবে এই -Eবিকল্পটি দিয়ে ভার্চুয়ালেনভের মধ্যে আপনি পিপ ইনস্টল করতে চান তা নির্দিষ্ট করে খেয়াল করুন

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