আমি কীভাবে পিপ সহ স্থানীয় ক্যাশে থেকে ইনস্টল করব?


142

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

এটি ডাউনলোড ব্যান্ডউইথ এবং সময়কে হ্রাস করবে।


1
নোট করুন যে পিপ 6.0 (2014-12-22) হিসাবে পিপ ডিফল্টরূপে ক্যাশে হবে। বিশদর জন্য পিপ.পি.পা.ই.ও.এন / স্টেবল / রেফারেন্স / পিপ_ইনস্টল . html# ক্যাচিং দেখুন ।
পাই ডিলপোর্ট

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

উত্তর:


125

আপডেট উত্তর 19-নভেম্বর -15

মতে পিপ ডকুমেন্টেশন :

ভি .0.০ দিয়ে শুরু করে পাইপ ডিফল্ট ক্যাশে অন সরবরাহ করে যা ওয়েব ব্রাউজারের মতোই কাজ করে। যখন ক্যাশেটি ডিফল্টরূপে চালু থাকে এবং এটি ডিফল্টরূপে সঠিক কাজটি করার জন্য ডিজাইন করা থাকে আপনি ক্যাশে অক্ষম করতে পারবেন এবং সর্বদা --no-cache-dirবিকল্পটি ব্যবহার করে পিপিআইতে অ্যাক্সেস করতে পারবেন ।

অতএব, আপডেট হওয়া উত্তরটি হ'ল যদি আপনি ডাউনলোডের ক্যাশে চান তবে তার ডিফল্টগুলির সাথে পাইপটি ব্যবহার করুন।

আসল উত্তর

থেকে পিপ খবর , সংস্করণ 0.1.4:

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

এর সুবিধা নিতে, আমি আমার সাথে নিম্নলিখিতগুলি যুক্ত করেছি ~/.bash_profile:

export PIP_DOWNLOAD_CACHE=$HOME/.pip_download_cache

বা, আপনি যদি ম্যাকের সাথে থাকেন:

export PIP_DOWNLOAD_CACHE=$HOME/Library/Caches/pip-downloads

মন্তব্য

  1. যদি কোনও প্যাকেজের নতুন সংস্করণ সনাক্ত হয় তবে এটি ডাউনলোড করে PIP_DOWNLOAD_CACHEডিরেক্টরিতে যুক্ত করা হবে । উদাহরণস্বরূপ, আমার কাছে এখন বেশ কয়েকটি জ্যাঙ্গো প্যাকেজ রয়েছে।
  2. এটি পাইপ নিউজ অনুসারে নেটওয়ার্ক অ্যাক্সেসের প্রয়োজনীয়তা সরিয়ে দেয় না , সুতরাং virtualenvsবিমানটিতে নতুন তৈরির জন্য এটি উত্তর নয় , তবে এটি এখনও দুর্দান্ত।

4
সম্ভবত আরও ভাল ধারণা এটি .bashrc এ রাখা, কারণ বাশ_প্রফাইলে শুধুমাত্র লগইন করার সময় কার্যকর করা হয়। এটি আপনার পক্ষে, এবং যাইহোক এটি একটি ভাল পরামর্শ :)
নিকিতা হিমাটোভ

1
ম্যাকস এ এটি কোনও শেলের শুরুতে লোড করা হয়।
saul.shanabrook

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

1
@ স্প্ল্যাকি আপনি মারাত্মকভাবে ত্রুটিযুক্ত বলে মন্তব্য করতে পারেন? আপনি যদি পিআইপিআইটি নাগালের জন্য না চান তবে এটিই - কোন সূচক; একটি ডাউনলোড ক্যাশে পিআইপিআই পৌঁছানোর জন্য অবশ্যই অर्थগোনাল বা না!
lvh

নীচে @ এলভিএইচ স্ল্যাসির উত্তরটি ব্যাখ্যা করেছে যে কেন পিপের ডাউনলোড ক্যাশে ত্রুটিযুক্ত। আমি পাইপ ইনস্টলটি ক্যাশে সক্ষম, উদ্ভটভাবে আরও বেশি সময় নিচ্ছে দেখেছি। পাইপ-অ্যাক্সেল এবং ঝুড়ি আরও ভাল বিকল্প বলে মনে হচ্ছে।
qris

52

আমার মতে, pip2piএই সমস্যার জন্য অনেক বেশি মার্জিত এবং নির্ভরযোগ্য সমাধান।

ডক্স থেকে:

পিপ 2 পিআইপি প্রয়োজনীয়তা থেকে পাইপিআই-সামঞ্জস্যপূর্ণ প্যাকেজ সংগ্রহস্থল তৈরি করে

pip2pi দুটি সহজ কমান্ড ব্যবহার করে আপনাকে নিজের পাইপিআই সূচক তৈরি করতে দেয়:

  1. একটি প্যাকেজ এবং এর সমস্ত প্রয়োজনীয়তা মিরর করতে, ব্যবহার করুন pip2tgz:

    $ cd /tmp/; mkdir package/
    $ pip2tgz packages/ httpie==0.2
    ...
    $ ls packages/
    Pygments-1.5.tar.gz
    httpie-0.2.0.tar.gz
    requests-0.14.0.tar.gz
    
  2. পূর্ববর্তী ডিরেক্টরি থেকে একটি প্যাকেজ সূচক তৈরি করতে:

    $ ls packages/
    bar-0.8.tar.gz
    baz-0.3.tar.gz
    foo-1.2.tar.gz
    $ dir2pi packages/
    $ find packages/
    /httpie-0.2.0.tar.gz
    /Pygments-1.5.tar.gz
    /requests-0.14.0.tar.gz
    /simple
    /simple/httpie
    /simple/httpie/httpie-0.2.0.tar.gz
    /simple/Pygments
    /simple/Pygments/Pygments-1.5.tar.gz
    /simple/requests
    /simple/requests/requests-0.14.0.tar.gz
    
  3. আপনি দ্বিতীয় ধাপে তৈরি সূচকটি থেকে ইনস্টল করতে, আপনি কেবল ব্যবহার করতে পারেন:

    pip install --index-url=file:///tmp/packages/simple/ httpie==0.2
    

এমনকি আপনার নিজের সূচকটি একটি দূরবর্তী হোস্টের সাথে মিরর করতে পারেন pip2pi


+1 পিপ 2 পিপ দুর্দান্ত কাজ করে !! আমি নেটওয়ার্ক সংযোগের উপর এত বেশি নির্ভর করতে পছন্দ করি না। আপনার সবচেয়ে বেশি প্রয়োজন হলে এটি ব্যর্থ হয়।
এমজিপি

এটি দুর্দান্ত কাজ করে, এটি আমার প্রশ্নের উত্তর দেয় stackoverflow.com/questions/18052217/… , আপনি কি সেখানে উত্তর দিতে পারবেন?
ল্যারি ক্যা

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

32

আরও নতুন পাইপ সংস্করণগুলির জন্য:

আরও নতুন পিপ সংস্করণগুলি এখন ডিফল্টরূপে ডাউনলোডগুলি ক্যাশে করে। এই ডকুমেন্টেশন দেখুন:

https://pip.pypa.io/en/stable/reference/pip_install/#caching

পুরানো পাইপ সংস্করণগুলির জন্য:

নামের একটি কনফিগারেশন ফাইল তৈরি ~/.pip/pip.confকরুন এবং নিম্নলিখিত সামগ্রীগুলি যুক্ত করুন:

[global]
download_cache = ~/.cache/pip

ওএস এক্স-তে, বেছে নেওয়ার পক্ষে আরও ভাল পথ ~/Library/Caches/pipহ'ল যেহেতু এটি অন্যান্য ওএস এক্স প্রোগ্রামগুলির কনভেনশন অনুসরণ করে।


এবং যদি আমি একই পিসির অন্যান্য ব্যবহারকারীদের অ্যাক্সেসের জন্য বিশ্বব্যাপী সেগুলি সঞ্চয় করতে চাইতাম? আমি যে কিভাবে করতে হবে? আমি কনফিগারেশন ফাইলটি / ইত্যাদি বা অন্য কোনও কিছুতে স্থাপন করতে চাই।
বাটান্দোয়া

@ বাটন্দওয়া: এটি কার্যকর হতে পারে। যদি তা না হয় তবে আপনি এটি চেষ্টা করে দেখতে পারেন: নিশ্চিত করুন যে সমস্ত ব্যবহারকারীদের pip.confএকটি download_cacheসেটিংস আছে যা একই সিস্টেম-ওয়াইড ডিরেক্টরিতে নির্দেশ করে।
ফ্লাইম

28

PIP_DOWNLOAD_CACHE এর কিছু গুরুতর সমস্যা রয়েছে। সবচেয়ে গুরুত্বপূর্ণ, এটি ডাউনলোডের হোস্টনামটিকে ক্যাশে এনকোড করে, তাই আয়না ব্যবহার করা অসম্ভব হয়ে যায়।

পিপ ডাউনলোডগুলির ক্যাশে পরিচালনা করার সর্বোত্তম উপায় হ'ল "প্যাকেজ ইনস্টল করুন" পদক্ষেপ থেকে "প্যাকেজ ডাউনলোড করুন" পদক্ষেপটি পৃথক করা। ডাউনলোড করা ফাইলগুলিকে সাধারণত "এসডিস্ট ফাইলগুলি" (উত্স বিতরণ) হিসাবে উল্লেখ করা হয় এবং আমি সেগুলি একটি ডিরেক্টরিতে রেখে চলেছি $ SDIST_CACHE।

দুটি পদক্ষেপই শেষ:

pip install --no-install --use-mirrors -I --download=$SDIST_CACHE <package name>

যা প্যাকেজটি ডাউনলোড করবে এবং এটিকে T_ SDIST_CACHE দ্বারা নির্দেশিত ডিরেক্টরিতে রাখবে। এটি প্যাকেজটি ইনস্টল করবে না। এবং তারপরে আপনি চালান:

pip install --find-links=file://$SDIST_CACHE --no-index --index-url=file:///dev/null <package name> 

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


গ্যাব্রিয়েল - এটি প্রথম বারে একবারে দুবার ডাউনলোড করা হয়নি এবং পরে দ্বিতীয়বার স্থানীয় ক্যাশে থেকে ইনস্টল করা হয়। তুমি কি দেখছো?
অস্পষ্টতা

আমি যদি প্রথম পদক্ষেপটি দু'বার চালিত করি তবে এটি দুবার ডাউনলোড হবে, তাই না? কমপক্ষে এটি এখানে ঘটেছে। আমার জানা দরকার যে এই প্যাকেজটি কার্যকর করার আগে কমপক্ষে একবারে প্রথম পদক্ষেপটি কার্যকর করা হয়েছে, অন্যথায় এটি একই ফাইলটি দুবার ডাউনলোড করবে download আমার যদি এটি চালুর প্রয়োজন হয় বা এটি আগে ডাউনলোড করা হয়েছে তবে আমি কীভাবে তা পরীক্ষা করতে পারি?
গ্যাব্রিয়েল জর্দো

অন্যান্য উত্তর অনুসারে আপনি সম্ভবত পাইপপিপি ব্যবহার করতে চান। :)
অস্পষ্টতা

এটি কি নির্ভরতাও ডাউনলোড করে?
monkut

আমি পাইপ 18.1 ব্যবহার করি এবং বিকল্পটি - কোন ইনস্টল উপস্থিত নেই। এই উত্তরটি কীভাবে আপডেট করবেন সে সম্পর্কে কোনও ধারণা?
paolof89

13

থেকে শুরু করে সংস্করণ 6.0 , pipএখন এটি নিজের ক্যাশে এর না:

  • অবমূল্যায়ন pip install --download-cache এবং pip wheel --download-cacheকমান্ড লাইন পতাকাগুলি হ্রাস করা হয়েছে এবং কার্যকারিতা সরানো হয়েছে। যেহেতু পাইপ এখন স্বয়ংক্রিয়ভাবে এটির অভ্যন্তরীণ এইচটিটিপি ক্যাশে কনফিগার করে এবং ব্যবহার করে যা --download-cacheবিদ্যমান বিকল্পগুলিকে অকার্যকর করে তোলা হয়েছে তবে পিপ ভি 8.0-এ অপসারণ না হওয়া পর্যন্ত তা গ্রহণযোগ্য হবে। আরও তথ্যের জন্য দয়া করে https://pip.pypa.io/en/latest/references/pip_install.html# ক্যাচিং দেখুন

উপরের লিঙ্ক থেকে আরও তথ্য :

ভি .0.০ দিয়ে শুরু করে পাইপ ডিফল্ট ক্যাশে অন সরবরাহ করে যা ওয়েব ব্রাউজারের মতোই কাজ করে। যখন ক্যাশেটি ডিফল্টরূপে চালু থাকে এবং এটি ডিফল্টরূপে সঠিক কাজটি করার জন্য ডিজাইন করা থাকে আপনি ক্যাশে অক্ষম করতে পারবেন এবং সর্বদা --no-cache-dirবিকল্পটি ব্যবহার করে পিপিআইতে অ্যাক্সেস করতে পারবেন ।


9

পাইপ হুইল একটি দুর্দান্ত বিকল্প যা প্যাকেজগুলি প্রাক-সংকলনের অতিরিক্ত বৈশিষ্ট্য সহ আপনি যা চান তা করে। থেকে সরকারী দস্তাবেজ :

প্রয়োজনীয়তার জন্য চাকা তৈরি করুন (এবং এর সমস্ত নির্ভরতা):

$ pip wheel --wheel-dir=/tmp/wheelhouse SomePackage

এখন আপনার /tmp/wheelhouseডিরেক্টরিতে আপনার সমস্ত নির্ভরতা পূর্বনির্ধারিত রয়েছে, তাই আপনি ফোল্ডারটিকে অন্য সার্ভারে অনুলিপি করতে এবং এই আদেশ দিয়ে সবকিছু ইনস্টল করতে পারেন:

$ pip install --no-index --find-links=/tmp/wheelhouse SomePackage

নোট করুন যে সমস্ত প্যাকেজগুলি মেশিনগুলিতে সম্পূর্ণ পোর্টেবল হবে না। কিছু প্যাকেজ বিশেষত পাইথন সংস্করণ, ওএস বিতরণ এবং / অথবা আপনি যে হার্ডওয়্যার আর্কিটেকচার ব্যবহার করছেন তার জন্য নির্মিত হবে। এটি ফাইলের নামে নির্দিষ্ট করা হবে, যেমন -cp27-none-linux_x86_64CP৪-বিট লিনাক্সের সিপিথন ২.7 এর জন্য etc.


3

কেবল পাইপ ব্যবহার করে (আমার সংস্করণটি 1.2.1), আপনি এর মতো স্থানীয় সংগ্রহস্থলও তৈরি করতে পারেন:

if ! pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>; then
    pip install --download-directory="$PIP_SDIST_INDEX" <package>
    pip install --find-links="file://$PIP_SDIST_INDEX" --no-index <package>
fi

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

( --download-cacheএকটি স্থানীয় ফাইল নাম যা সম্পূর্ণ হয়েছে (পলান) URL হল সৃষ্টি করেন এবং PIP এর সাথে একটি সূচক হিসাবে এই ব্যবহার করতে পারবেন না --find-links--download-cacheক্যাশে ফাইল ব্যবহার করবে, যদি পাওয়া যায় নি। আমরা পিপ দ্বিতীয় কল করার জন্য এই বিকল্পটি যোগ করতে পারিনি, কিন্তু সূচক যেহেতু ইতিমধ্যে এক ধরণের ক্যাশে হিসাবে কাজ করে, এটি অগত্যা প্রচুর পরিমাণে আসে না instance উদাহরণস্বরূপ, আপনার সূচক খালি হলে এটি সাহায্য করবে)


3

এই পিপ-অ্যাক্সেল নামে একটি নতুন সমাধান রয়েছে , যা pipঅন্তর্নির্মিত ক্যাচিংয়ের জন্য একটি ড্রপ-ইন প্রতিস্থাপন ।

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

  • উত্স বিতরণ ডাউনলোডগুলি ক্যাশে করা হয় এবং উত্স বিতরণ আর্কাইভের স্থানীয় সূচক তৈরি করতে ব্যবহৃত হয়।

  • বাইনারি ডিস্ট্রিবিউশনগুলি বাইনারি উপাদানগুলি (যেমন এম 2 ক্রাইপ্টো এবং এলএক্সএমএল) এর সাথে নির্ভরতা ইনস্টল করার প্রক্রিয়াটি গতিতে ব্যবহার করা হয়। প্রতিটি ভার্চুয়াল পরিবেশের জন্য এই নির্ভরতাগুলি আবার সংশোধন করার পরিবর্তে আমরা সেগুলি একবার সংকলন করি এবং বাইনারি * .tar.gz বিতরণ হিসাবে ফলাফলটি ক্যাশে করি।

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

আমরা থেকে পরিবর্তন করতে 10x speedup প্রায় দেখা করেছি pipথেকে pip-accel


2

একটি সহজ বিকল্প হয় basket

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

তারপরে আপনি এই ডিরেক্টরিটি উত্স হিসাবে ব্যবহার করতে পারেন pip:

pip install --no-index -f file:///path/to/basket package

বা easy_install:

easy_install -f ~/path/to/basket -H None package

আপনি যখনই অনলাইনে থাকবেন তখন ঘুড়িটি আপডেট করতে আপনি এটি ব্যবহার করতে পারেন।


সীমাবদ্ধতা (অফিসিয়াল পৃষ্ঠা থেকে): ঝুড়ি শুধুমাত্র উত্স বিতরণ ডাউনলোড করে, এটি পাইপআইতে হোস্ট করা না এমন প্যাকেজগুলি ডাউনলোড করতে পারে না এবং এটি সর্বদা সর্বশেষতম সংস্করণ ডাউনলোড করে সংস্করণ প্রয়োজনীয়তা (যেমন "নাক> = 1.1.2") উপেক্ষা করে।
hdiogenes

0

আমি মনে করি প্যাকেজ "পাইপ-অ্যাক্সেল" অবশ্যই একটি ভাল পছন্দ হতে হবে।

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