এটি ভঙ্গ না করে একটি ভার্চুয়ালেনভ ফোল্ডারটির নামকরণ


162

আমি ফোল্ডার তৈরি করেছি এবং এতে একটি ভার্চুয়ালেনভ দৃষ্টান্ত শুরু করেছি initial

$ mkdir myproject
$ cd myproject
$ virtualenv env

আমি যখন রান করি তখন (env)$ pip freezeএটি ইনস্টল করা প্যাকেজগুলি যেমনটি করা উচিত তেমনি প্রদর্শন করে।

এখন আমি নামকরণ myproject/করতে চাই project/

$ mv myproject/ project/

যাইহোক, এখন যখন আমি চালাচ্ছি

$ . env/bin/activate
(env)$ pip freeze

এটি বলে যে পাইপ ইনস্টল করা হয়নি। পরিবেশটি না ভেঙে আমি কীভাবে প্রকল্প ফোল্ডারের নাম পরিবর্তন করব?


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

2
হ্যাঁ, আপনি ঠিক বলেছেন, এটি ভার্চুয়াল এনভির মেরামত করবে, তবে সমস্যাটি সমাধান করবে না।
ফ্লোরিয়ান

নভেম্বর 2019, পাইথন 3। আমার জন্য সর্বোত্তম সমাধানটি বর্ণনা করা হয়েছে আড়ঙ্গোরকা
সমীর সাদেক

উত্তর:


148

আপেক্ষিক পাথ ব্যবহার করতে আপনার ইনস্টলটি সামঞ্জস্য করতে হবে। বিকল্পের virtualenvসাথে এটি সরবরাহ করে --relocatableডক্স থেকে :

সাধারণত পরিবেশ একটি নির্দিষ্ট পথে আবদ্ধ থাকে। এর অর্থ হ'ল আপনি কোনও পরিবেশের চারপাশে স্থানান্তর করতে বা এটি অন্য কম্পিউটারে অনুলিপি করতে পারবেন না। কমান্ডের সাহায্যে স্থান পরিবর্তনযোগ্য করতে আপনি একটি পরিবেশ ঠিক করতে পারেন:

। ভার্চুয়ালেনভ - ফ্রেলোকেটেবল এএনভি

দ্রষ্টব্য: ENV ভার্চুয়াল পরিবেশের নাম এবং আপনাকে এটি ENV ডিরেক্টরি থেকে বাইরে চালানো উচিত run

এটি সেটআপলগুলিতে তৈরি কিছু ফাইল তৈরি করবে বা আপেক্ষিক পাথগুলি বিতরণ করবে এবং পরিবেশ নির্বাচন করার জন্য পাইথন ইন্টারপ্রেটারের অবস্থান ব্যবহার না করে অ্যাক্টিভেট_থিস.পি ব্যবহারের জন্য সমস্ত স্ক্রিপ্ট পরিবর্তন করবে ts

দ্রষ্টব্য: আপনি পরিবেশে কোনও প্যাকেজ ইনস্টল করার পরে আপনাকে অবশ্যই এটি চালাতে হবে। যদি আপনি পরিবেশটিকে স্থানান্তরযোগ্য করে তোলেন, তবে একটি নতুন প্যাকেজ ইনস্টল করুন, আপনাকে অবশ্যই আবার ভার্চুয়ালেনভ চালাতে হবে - পেরেকোকেটেবল।


2
সতর্কবাণী: স্থান পরিবর্তনযোগ্য হিসাবে একটি enভের পরিবর্তন করা আপনাকে ফোল্ডারটি সরিয়ে দেওয়ার চেয়ে আরও বেশি কিছু করে। ( দ্রষ্টব্য: দস্তাবেজগুলি থেকে অনুলিপি দেখুন ) ... এর পার্শ্ব প্রতিক্রিয়া হতে পারে।
বেন রবার্টস

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

1
@ grep -EIr '\Wold_venv_name\W' /path/to/new_venvডিডেমজ এমন কোনও শাবংগুলিকে খুঁজে পেতে সহায়তা করবে যা পুরাতন ভেনভ ব্যবহার করে, তবে স্থানান্তরিত ভেনভের সম্পূর্ণ যাচাইকরণ নয়।
hobs

2
এছাড়াও, আপনাকে ভার্চুয়ালেনভ্রাপার .projectফাইলটি সম্পাদনা করতে হবে, যার মধ্যে সোর্স কোডের পথ রয়েছে যা ভার্চুয়ালেনভের উপর নির্ভর করে, ধরে নিই যে আপনি ভার্চুয়ালেনভ্রাপার ব্যবহার করছেন এবং নতুন ভার্চুয়ালেনভের সাথে মেলে এই প্রকল্পটির নামও বদলে দিয়েছেন।
hobs

এটি চালানোর আগে আমাকে ভার্চুয়ালেনভ নিষ্ক্রিয় করতে হয়েছিল।
অ্যান্টোনেস্টাম

108

আমি বিশ্বাস করি "জেনে কেন" "কীভাবে" জানার চেয়ে বেশি গুরুত্বপূর্ণ । সুতরাং, এখানে এটি সংশোধন করার জন্য অন্য পদ্ধতির is

আপনি যখন চালান . env/bin/activate, এটি আসলে নিম্নলিখিত কমান্ডগুলি কার্যকর করে ( /tmpউদাহরণস্বরূপ ব্যবহার করে ):

VIRTUAL_ENV="/tmp/myproject/env"
export VIRTUAL_ENV

যাইহোক, আপনি সবেমাত্র নামকরণ myprojectকরেছেন project, যাতে আদেশটি কার্যকর করতে ব্যর্থ হয়েছিল। এ কারণেই এটি বলে pip is not installed, কারণ আপনি pipসিস্টেমটি বিশ্বব্যাপী পরিবেশে ইনস্টল করেন নি এবং আপনার ভার্চুয়ালেনভ pipসঠিকভাবে উত্সর্গীকৃত হয়নি।

আপনি যদি ম্যানুয়ালি এটি ঠিক করতে চান তবে এই উপায়:

  1. ভিমের মতো আপনার প্রিয় সম্পাদক সহ, /tmp/project/env/bin/activateসাধারণত লাইনে ৪২-তে সংশোধন করুন :

    VIRTUAL_ENV='/tmp/myproject/env' => VIRTUAL_ENV='/tmp/project/env'

  2. /tmp/project/env/bin/pip1 লাইনে পরিবর্তন করুন :

    #!/tmp/myproject/env/bin/python => #!/tmp/project/env/bin/python

এর পরে, আপনার ভার্চুয়াল পরিবেশটি envআবার সক্রিয় করুন এবং আপনি দেখতে পাবেন যে আপনার pipআবার ফিরে এসেছে।


6
যদি ম্যানুয়ালি পথগুলি পরিবর্তন করা পছন্দসই হয়, তবে এটি অবশ্যই লক্ষ করা উচিত যে দুটিরও বেশি হার্ড-কোডড ফাইল রয়েছে। তাদের সমস্ত কিছু যেমন: এর সাথে সন্ধান করুন grep -iHnR venv-name /path/to/venv-name | grep -v "^Binary file" | grep -i venv-name। প্রকৃতপক্ষে, আমি লক্ষ করেছি যে আমার জ্যাঙ্গো দৃষ্টান্তগুলির একটিতে, অনেকগুলি প্যাকেজগুলির মধ্যে "পাইথন শ-ব্যাং যাওয়ার পথ" ছিল।
কেভিন

এটি আমাকে অনেক সাহায্য করেছিল। আমার অবশ্যই জানা দরকার কেন ... ধন্যবাদ!
জার্ভিস

উপরের কেভেনের মন্তব্যের বিপরীতে, আমি দেখতে পেয়েছি যে এই দুটি লাইন সম্পাদনা করা আমার পক্ষে সরানোর ক্ষেত্রে সমস্ত সমস্যার সমাধান করে virtualenv। সম্ভবত কিছু ব্যবহারের ক্ষেত্রে রয়েছে যা আমি ব্যবহার করছি না এবং তাই সমস্যাটির মুখোমুখি হয় না।
ডিলিট

যে আঁচড়ের দাগ! আজ আমি একটি সমস্যার মধ্যে দৌড়ে: আইপথন এর মধ্যে কাজ করবে না virtualenv। এটি সমাধানের জন্য, আমি ipythonফাইলটিতে ব্যাশ শিরোনাম (এটি কী বলা হয়?) সম্পাদনা করেছি এবং তারপরে এটি দুর্দান্ত কাজ করেছে।
ডেলিট

হুম এটি আমার পক্ষে কাজ করছে না, এবং দেখে মনে হচ্ছে যে আমার অ্যাক্টিভেট স্ক্রিপ্টটিতে লাইন 1 নেই যা এখানে ২ য় ধাপে উল্লেখ করা হয়েছে?
ইভান জমির

40

দ্রষ্টব্য: @ জেবি হিসাবে পয়েন্ট আউট এই সমাধান শুধুমাত্র সহজে (পুনরায়) তৈরি প্রযোজ্য virtualenvসে। কোনও পরিবেশ যদি এই সমাধানটি ইনস্টল করতে বেশ কয়েক ঘন্টা সময় নেয় তবে এটির প্রস্তাব দেওয়া হয় না


ভার্চুয়ালেনভগুলি দুর্দান্ত কারণ এগুলি তৈরি করা এবং চারপাশে স্যুইচ করা সহজ; তারা আপনাকে একটি একক কনফিগারেশনে লক করা থেকে বিরত রাখে। আপনি যদি প্রকল্পের প্রয়োজনীয়তাগুলি জানেন বা সেগুলি পেতে পারেন তবে একটি নতুন করুনvirtualenv :

  • একটি requirements.txtফাইল তৈরি করুন

    (env)$ pip freeze > requirements.txt

    • আপনি যদি requirements.txtফাইলটি তৈরি করতে না পারেন env/lib/pythonX.X/site-packagesতবে আসলটি সরানোর আগে পরীক্ষা করুন env
  • বিদ্যমানটি মুছুন (env)

    deactivate && rm -rf env

  • একটি নতুন তৈরি করুন virtualenv, এটি সক্রিয় করুন এবং প্রয়োজনীয়তা ইনস্টল করুন

    virtualenv env && . env/bin/activate && pip install -r requirements.txt


বিকল্পভাবে, সমস্ত ভার্চুয়ালেনভকে কেন্দ্রীভূত স্থানে রাখা হওয়ায় জিনিসগুলিকে কিছুটা সহজ করার জন্য ভ্যুচুয়ালেভ্রাপার ব্যবহার করুন

$(old-venv) pip freeze > temp-reqs.txt
$(old-venv) deactivate
$ mkvirtualenv new-venv
$(new-venv) pip install -r temp-reqs.txt
$(new-venv) rmvirtualenv old-venv

6
কিছু লোকের জন্য বেশ pip install -r requirements.txtকয়েক ঘন্টা সময় লাগে (তৃতীয় পক্ষের সি-এক্সটেনশনগুলি রাস্পবেরি পাইতে সংকলন করে)।
জেবি।

4
সম্ভবত সত্য, তবে এটি আমার কাছে প্রান্তের মতো মনে হচ্ছে। আমি এখনও মনে করি এটি অনেক ক্ষেত্রে কার্যকর একটি সমাধান হতে পারে।
bnjmn

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

1
@ বিএনজেএমএন ওয়ান-লাইনার virtualenv env && pip install -r requirements.txtনতুন পরিবেশে প্রয়োজনীয়তাগুলি ইনস্টল করবে না কারণ আপনি এটিকে সক্রিয় করবেন না
ইয়ারিন

1
@ ইয়্যারিন এটি উল্লেখ করার জন্য ধন্যবাদ। আমি virtualenv-wrapperনিজে ব্যবহারকারী হয়ে (এটি স্বয়ংক্রিয়ভাবে সৃজনে সক্রিয় হয়) আমি এটিকে পুরোপুরি মিস করেছি। আমি virtualenvকোনও বিভ্রান্তি এড়ানোর আশায় সক্রিয়করণ অন্তর্ভুক্ত করার জন্য আমার উত্তর আপডেট করেছি ।
বিএনজেএমএন

28

সাহায্য করার জন্য আমি সর্বদা ভার্চুয়ালেনভ্র্যাপার ইনস্টল করি। শেল প্রম্পট থেকে:

pip install virtualenvwrapper

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

cpvirtualenv oldenv newenv

এবং তারপরে, প্রয়োজনে:

rmvirtualenv oldenv

আপনার নতুনকে যেতে:

workon newenv

1
আফ্রোভের উত্তরটি সত্যই গ্রহণযোগ্য পদ্ধতি হওয়া উচিত।
জ্যাক্সিয়ান

এটি কেবলমাত্র যদি virtualenvwrapperনা ব্যবহার করে তবে এটি কাজ করে virtualenv। @Ryankdwyer এর এই উত্তরটি আরও ভাল।
এলএস

আমি আমার উত্তরটি সম্পাদনা করে প্রতিফলিত করতে পারি যে একজনকে 'ভার্চুয়ালেনভ্রাপার' ইনস্টল করা উচিত। ধরে নিলাম যে ভার্চুয়াল পরিবেশের নামকরণের অনেক কিছুই ঘটে, আমি এইভাবে সুপারিশ করব।
আফ্রোভা

যদিও এটি ভার্চুয়ালেনভ্রাপার উপর নির্ভর করে তবে এটি সবচেয়ে সহজ। এবং এটি ভাল কাজ করে।
blasrodri

17

আপনি এই পদক্ষেপগুলি অনুসরণ করে আপনার সমস্যার সমাধান করতে পারেন:

  1. আপনার ডিরেক্টরিটির নতুন নাম দিন
  2. এটি পুনরায় চালু করুন: $ virtualenv ..\path\renamed_directory
  3. আপনার প্যাকেজগুলি স্থানে রেখে ডিরেক্টরি অ্যাসোসিয়েশনগুলি সংশোধন করবে virt
  4. $ scripts/activate
  5. $ pip freeze আপনার প্যাকেজগুলি যাচাই করার জন্য
  6. একটি গুরুত্বপূর্ণ সতর্কবাণী, যদি আপনার ভার্চুয়ালেনভ ডিরেক্টরিতে স্ক্রিপ্ট ফাইলগুলিতে আপনার কোনও স্থিতিশীল পথ নির্ভরতা থাকে তবে আপনাকে সেগুলি ম্যানুয়ালি পরিবর্তন করতে হবে।

1
এটি আমার জন্য খুব ভাল সমাধান ছিল। যেহেতু এই সমাধান করতে পারে সঙ্গে সংশ্লিষ্ট সমস্যা কিছু এড়ানো --relocatable, আমি মনে করি এই সমাধান গৃহীত উত্তর চেয়ে ভাল। এখনও অবধি, আমি লক্ষ্য করেছি যে অনেকগুলি .pycফাইল _new_name_/lib/python2.7এখনও উল্লেখ করে _old_name_। তবে, এটি আমার পরিবেশ কীভাবে কাজ করে তা প্রভাবিত করে না বলে মনে হচ্ছে। সম্ভবত একমাত্র আরও ভাল সমাধান হ'ল এখানে virtualenvwrapperবা উত্তরগুলির মধ্যে উল্লিখিত অন্যান্য কিছু ইউটিলিটি। কমপক্ষে এই সমাধানটির জন্য অতিরিক্ত প্রোগ্রাম ইনস্টল করার প্রয়োজন নেই।
LS

একটি যাদুমন্ত্র মত কাজ করে!
আমিরহসিন

13

তবুও এটি করার আরেকটি উপায় যা আমার জন্য বহুবার সমস্যা ছাড়াই কাজ করেছিল তা হ'ল ভার্চুয়ালেনভ-ক্লোন :

pip install virtualenv-clone
virtualenv-clone old-dir/env new-dir/env

এটি সেরা উত্তর হিসাবে চিহ্নিত করা উচিত। হাত নামাও! এটি ক্লোন করতে কিছুটা সময় নিয়েছে, তাই ধৈর্যশীল ছেলেরা।
অমিত্রজিৎ বোস

virtualenv- ক্লোন প্রম্পট আপডেট করতে অবহেলা করে। ম্যানুয়ালি যে কাজ করতে হবে। তা ছাড়া, দুর্দান্ত।
ব্যবহারকারী 3667349

5

(প্রকল্প ফোল্ডারের ভিতরে)

cd bin
sed -i 's/old_dir_name/new_dir_name/g' *

নিষ্ক্রিয় এবং সক্রিয় করতে ভুলবেন না


ভাল কাজ করে; বা লিনাক্স পাথের জন্য:sed -i "s|$old_dir|$new_dir|g" bin/*
19:19 এস্ট্রোয়াইকা

sed -i '.original' 's/old_dir_name/new_dir_name/g' *ম্যাক্সের জন্য
অ্যালেক্স

1

virtualenv --relocatable ENVএকটি পছন্দসই সমাধান নয়। আমি ধরে নিয়েছি বেশিরভাগ লোকেরা কোনও দীর্ঘমেয়াদি পার্শ্ব প্রতিক্রিয়া ছাড়াই ভার্চুয়ালেনভের নামকরণের দক্ষতা চান ।

সুতরাং আমি এটি করতে একটি সহজ সরঞ্জাম তৈরি করেছি। ভার্চুয়েলেভ-এমভির জন্য প্রকল্প পৃষ্ঠাটি এটি আরও কিছুটা বিশদরেখায় বর্ণনা করেছে তবে মূলত আপনি virtualenv-mvযেমন ব্যবহার করতে পারেন ঠিক তেমন mvকোনও কার্যকর প্রয়োগ (কোনও বিকল্প ছাড়াই)।

উদাহরণ স্বরূপ:

virtualenv-mv myproject project

তবে দয়া করে মনে রাখবেন যে আমি এটিকে কেবল হ্যাক করেছি। এটি অস্বাভাবিক পরিস্থিতিতে (যেমন সিমলিংকড ভ্যুয়ুয়্যালএনভিগুলি) ভেঙে যেতে পারে তাই দয়া করে সাবধান হন (আপনি যেটি হারাতে পারবেন না তার ব্যাকআপ নিন) এবং আপনার যদি কোনও সমস্যা হয় তবে আমাকে জানান।

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