প্রয়োজনীয়তা.txt সহ ইনস্টল করার সময় একক প্যাকেজে ব্যর্থ হওয়া থেকে পাইপ বন্ধ করুন


138

আমি প্যাকেজ ইনস্টল করছি requirements.txt

pip install -r requirements.txt

requirements.txtফাইল লেখা আছে:

Pillow
lxml
cssselect
jieba
beautifulsoup
nltk

lxmlএকমাত্র প্যাকেজটি ইনস্টল করতে ব্যর্থ হয়েছে এবং এর ফলে সমস্ত কিছু ব্যর্থ হয়ে যায় (মন্তব্যে লার্স্ক দ্বারা নির্দেশিত প্রত্যাশিত ফলাফল)। যাইহোক, lxmlব্যর্থতার পরে pipএখনও প্যাকেজগুলির মধ্যে দিয়ে যায় এবং ডাউনলোড করে।

pip install -r requirements.txtকমান্ডটি যা আমি বুঝতে পেরেছি তা থেকে ব্যর্থ হলে তালিকাভুক্ত প্যাকেজগুলির মধ্যে requirements.txtকোনওটি ইনস্টল করতে ব্যর্থ হয়।

এটি কী করতে পারে pip install -r requirements.txtতা ইনস্টল করতে এবং এটি যে প্যাকেজগুলি পারছে না সেগুলি এড়িয়ে যেতে বা এটি কিছু ব্যর্থ হওয়ার সাথে সাথেই প্রস্থান করতে যাওয়ার জন্য দৌড়ানোর সময় আমি কি কোনও যুক্তি পাস করতে পারি?


3
আপনার প্রয়োজনীয়তা থেকে টেক্সটএক্সএমএল সরিয়ে দিন। টেক্সট
রিক্যায়

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

5
যদি কোনও প্যাকেজ requirements.txtএটিতে তালিকাভুক্ত করা হয় তবে সম্ভবত এটি প্রয়োজনীয় হয় , সুতরাং এটি বোধগম্য হয় যে pipপ্যাকেজটি ইনস্টল করা না গেলে ব্যর্থ হবে। কোডটি যদি সেই প্যাকেজ ছাড়াই চলতে থাকে তবে এটির খুব কমই প্রয়োজন ছিল। এলোমেলোভাবে ব্যর্থ প্যাকেজগুলি থেকে ছাঁটাই করা দেখে requirements.txtমনে হচ্ছে এটি নিখোঁজ নির্ভরতাগুলির সাথে সমস্যা তৈরি করে।
larsks

1
@ অ্যালারস একক বিকাশের পরিবেশ বা প্যাকেজের জন্য একাধিক প্রয়োজনীয়তা t টেক্সট ফাইল থাকা খুব সাধারণ be উদাহরণস্বরূপ, oneচ্ছিক সরঞ্জামগুলির মধ্যে একটি পূর্ণ থাকতে পারে যা ইউনিট / ইন্টিগ্রেশন পরীক্ষার পরিবেশ বা পারফরম্যান্স প্রোফাইলিং বাড়ানোর জন্য ব্যবহার করা যেতে পারে, তবে এগুলি কঠোরভাবে প্রয়োজন হয় না। আপনি এখনও এই প্যাকেজগুলি এবং যে কোনও পিনযুক্ত সংস্করণগুলি প্রকাশ করে একটি একক উত্স ফাইলটি সংস্করণ নিয়ন্ত্রণ করতে চান pip install -r <some file>এবং উপযুক্ত পরিবেশের সৃষ্টিকে মানক করার জন্য একই কর্মপ্রবাহের উপর নির্ভর করতে পারেন।
ইলি

4
এটি দেওয়া হয়েছে বলে মনে হচ্ছে যে পাইপটি প্রস্তাব দেওয়ার জন্য খুব সুরের বধির কোনও ধরণের গ্রেফিউল ব্যর্থতা / alচ্ছিক এড়িয়ে যাওয়া আচরণকে সমর্থন করা উচিত নয় যা একটি সতর্কতা প্রিন্ট করে তবে যা পারে তা ইনস্টল করে। প্রয়োজনীয় ফাইল থেকে এই ধরণের পাইপ-ভিত্তিক ইনস্টলেশনের জন্য এটি খুব সাধারণ প্রয়োজন।
ely

উত্তর:


230

প্রতিটি লাইন দিয়ে চালানো pip installএকটি ব্যর্থতার কাজ হতে পারে।

cat requirements.txt | xargs -n 1 pip install

দ্রষ্টব্য: -aম্যাকোএসের অধীনে প্যারামিটার উপলব্ধ নেই, তাই পুরাতন বিড়ালটি আরও বহনযোগ্য।


21
ম্যাকের জন্য:cat requirements.txt | xargs -n 1 pip install
ওয়াল্টি ইয়াং

5
আমাকে করতে হয়েছিল: cat requirements.txt | cut -f1 -d"#" | sed '/^\s*$/d' | xargs -n 1 pip installমন্তব্যে যে কোনও কিছু সরিয়ে ফেলতে এবং খালি লাইনগুলি থেকে মুক্তি পেতে rid
নেরেক

1
কমপক্ষে জিএনইউ সহ xargs, -aপতাকা বিকল্প রয়েছে, যা xargsফাইল থেকে আর্গুমেন্ট পড়ার অনুমতি দেয় , তাই এটি হিসাবে এটি করা যায় xargs -n 1 -a requirements.txt pip install। প্রতিরোধ UUOC ও অত্যধিক নদীর গভীরতানির্ণয়
Sergiy Kolodyazhnyy

7
উইন্ডোজের জন্য :)FOR /F %k in (requirements.txt) DO pip install %k
wcyn

এমনকি -aপতাকা ছাড়াও বিবেচনা করুন < requirements.txt xargs -n 1 pip installবা আপনি যদি সামনের দিকে পুনঃনির্দেশ পছন্দ করেন না xargs -n 1 pip install < requirements.txt,। :-)
টোরেক

10

এই সমাধানটি আপনার প্রয়োজনীয়তাগুলিতে খালি লাইনগুলি, শ্বেত স্পেস লাইনগুলি, # মন্তব্য লাইনগুলি, হোয়াইটস্পেস-তারপরে - # মন্তব্য লাইনগুলি পরিচালনা করে।

cat requirements.txt | sed -e '/^\s*#.*$/d' -e '/^\s*$/d' | xargs -n 1 pip install

সেড ম্যাজিকের জন্য এই উত্তরের টুপিটি ।


1
সুন্দরভাবে কাজ করে। আমি pip freezeপরিবর্তে ব্যবহার cat requirements.txt
বিশাল

5

উইন্ডোজ জন্য:

পাইপ সংস্করণ> = 18

import sys
from pip._internal import main as pip_main

def install(package):
    pip_main(['install', package])

if __name__ == '__main__':
    with open(sys.argv[1]) as f:
        for line in f:
            install(line)

পাইপ সংস্করণ <18

import sys
import pip

def install(package):
    pip.main(['install', package])

if __name__ == '__main__':
    with open(sys.argv[1]) as f:
        for line in f:
            install(line)

'প্রধান' পাইপের অংশ নয়। ত্রুটি.
প্রানজেল

4

xargsযদি আপনি আপনার প্রয়োজনীয়তা ফাইলে মন্তব্য বা ফাঁকা রেখা আছে সমাধান করা গেলেও বহনযোগ্যতা বিষয় (বাসদ / গনুহ) থাকতে পারে এবং / অথবা হতে কষ্টকর।

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

sedOption চ্ছিক নির্ভরতা ইনস্টল করতে আমি নিম্নলিখিত শেল স্ক্রিপ্টটি ব্যবহার করি (প্রয়োজনীয় ) :

#!/bin/sh

while read dependency; do
    dependency_stripped="$(echo "${dependency}" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')"
    # Skip comments
    if [[ $dependency_stripped == \#* ]]; then
        continue
    # Skip blank lines
    elif [ -z "$dependency_stripped" ]; then
        continue
    else
        if pip install "$dependency_stripped"; then
            echo "$dependency_stripped is installed"
        else
            echo "Could not install $dependency_stripped, skipping"
        fi
    fi
done < recommends.txt

0

ধন্যবাদ, উইন্ডোজ কেস জন্য এটেন প্রথম।

তবে, 18 পিপে আপগ্রেড করার পরে, পাইপ প্যাকেজটি জনসাধারণের কাছে প্রকাশিত হবে না। সুতরাং আপনার এই জাতীয় কোড পরিবর্তন করার প্রয়োজন হতে পারে।

 # This code install line by line a list of pip package 
 import sys
 from pip._internal import main as pip_main

 def install(package):
    pip_main(['install', package])

 if __name__ == '__main__':
    with open(sys.argv[1]) as f:
        for line in f:
            install(line)

-1

উইন্ডোজ জন্য:

import os
from pip.__main__ import _main as main

error_log = open('error_log.txt', 'w')

def install(package):
    try:
        main(['install'] + [str(package)])
    except Exception as e:
        error_log.write(str(e))

if __name__ == '__main__':
    f = open('requirements1.txt', 'r')
    for line in f:
        install(line)
    f.close()
    error_log.close()
  1. একটি স্থানীয় ডিরেক্টরি তৈরি করুন এবং এতে আপনার requirements.txtফাইলটি দিন।
  2. উপরের কোডটি অনুলিপি করুন এবং এটিকে একই ডিরেক্টরিতে পাইথন ফাইল হিসাবে সংরক্ষণ করুন। .pyউদাহরণস্বরূপ, এক্সটেনশন ব্যবহার করতে ভুলবেন নাinstall_packages.py
  3. একটি সেন্টিমিডি ব্যবহার করে এই ফাইলটি চালান: python install_packages.py
  4. উল্লিখিত সমস্ত প্যাকেজগুলি একেবারে না থামিয়ে একযোগে ইনস্টল করা হবে। :)

আপনি ইনস্টল ফাংশনে অন্যান্য পরামিতি যুক্ত করতে পারেন। ভালো লেগেছে: main(['install'] + [str(package)] + ['--update'])

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