ডিস্টুটিসঅপশন এরিয়ার: অবশ্যই বাসা বা উপসর্গ / এক্সিকিউটি-উপসর্গ সরবরাহ করতে হবে - উভয়ই নয়


144

আমি সাধারণত পাইপের মাধ্যমে পাইথন প্যাকেজ ইনস্টল করেছি।

গুগল অ্যাপ ইঞ্জিনের জন্য, আমাকে অন্য টার্গেট ডিরেক্টরিতে প্যাকেজ ইনস্টল করতে হবে।

আমি চেষ্টা করেছিলাম:

পাইপ ইনস্টল করুন -আই ফ্লাস্ক-রিফুল - স্টার্ট ./lib

তবে এতে ব্যর্থ হয়:

উভয় নয় - অবশ্যই হোম বা উপসর্গ / এক্সিকিউটিভ-উপসর্গ সরবরাহ করতে হবে

আমি কীভাবে এটি কাজ করতে পারি?

উত্তর:


289

আপনি কি ওএস এক্স এবং হোমব্রিউ ব্যবহার করছেন? হোমব্রিউ পাইথন পৃষ্ঠা https://github.com/Homebrew/brew/blob/master/docs/Homebrew-and-Python.md পিপ এবং একটি চারপাশের কাজ সহ একটি জ্ঞাত সমস্যা কল করে।

আমার জন্য কাজ করেছেন।

নিম্নলিখিত বিষয়বস্তুগুলির সাথে একটি। / .Pydistutils.cfg ফাইল যুক্ত করে আপনি এই "খালি উপসর্গ "টিকে ডিফল্ট করতে পারেন:

[install]
prefix=

সম্পাদনা করুন: এই হোমব্রু প্রস্তাবিত বিকল্পটি ব্যবহার করবেন না, এটি স্বাভাবিক পাইপ ক্রিয়াকলাপগুলি ভেঙে দেবে


5
ভাল জিনিস, লিঙ্কটি খারাপ, আমি আশা করি এটিই নতুন: github.com/Homebrew/homebrew/blob/master/share/doc/homebrew/…
patt0

6
নোট করুন যে ফাইলটি আমার জন্য ভার্চুয়াল পরিবেশকে ভেঙে দিয়েছে।
Dmytro Sadovnychyi

16
এই খালি উপসর্গ ব্যবসায় সাধারণ pip installক্রিয়াকলাপগুলি বিরতি দেয় :(
জাপ

10
যে কেউ মূর্ত আউট করেছেন কিভাবে অনুমতি --targetযখন না ডিফল্ট বিনষ্টকারী pip installআচরণ?
ryantuck

3
এটি আর বৈধ বলে মনে হয় না। লিঙ্কটি নষ্ট হয়ে গেছে এবং আপডেট হওয়া লিঙ্কটি পিডিস্টুটিলস.সি.পি.জি. সম্পর্কে কথা বলবে না
লুক্রটিয়েল

164

আমি বিশ্বাস করি যে এই সমস্যার একটি সহজ সমাধান রয়েছে (ম্যাকোজে হোমব্রাবির পাইথন) যা আপনার সাধারণ পাইপ ক্রিয়াকলাপগুলিকে ভাঙবে না।

আপনাকে যা করতে হবে তা হ'ল setup.cfgআপনার প্রকল্পের মূল ডিরেক্টরিতে একটি ফাইল তৈরি করা , সাধারণত যেখানে আপনার প্রধান __init__.pyবা সম্পাদনযোগ্য পাই ফাইল থাকে। সুতরাং যদি আপনার প্রকল্পের মূল ফোল্ডারটি হয়: তবে সেখানে /path/to/my/project/একটি setup.cfgফাইল তৈরি করুন এবং যাদু শব্দের ভিতরে রাখুন:

[install]
prefix=  

ঠিক আছে, এখন আপনি সেই ফোল্ডারের জন্য পাইপের আদেশগুলি চালাতে সক্ষম হবেন:

pip install package -t /path/to/my/project/  

এই কমান্ডটি কেবলমাত্র সেই ফোল্ডারের জন্যই চালিত হবে। আপনার setup.cfgকাছে অন্য যে কোনও প্রকল্প থাকতে পারে কেবল অনুলিপি করুন । .pydistutils.cfgআপনার হোম ডিরেক্টরিতে একটি লেখার দরকার নেই ।

আপনি মডিউলগুলি ইনস্টল করার পরে, আপনি মুছে ফেলতে পারেন setup.cfg


2
এটি পাশাপাশি পাইপ ৩. with নিয়ে পুরোপুরি কাজ করেছে। এবং আমার পাইপটি এখনও অক্ষত।
হ্যানিবলাল

10
এটি গ্রহণযোগ্য উত্তর হওয়া উচিত। গ্লোবাল পাইপ সেটিংস নিয়ে সমস্যা সৃষ্টি করা এড়ানো।
ট্রিনিট্রনএক্স

10
setup.cfgইনস্টলেশন অংশ পরে অপসারণ উপর জোর । আমি পুরো 2 দিন পুড়ে গেলাম কেন আমার ভ্যুচুয়ালেভ পরিবেশের জন্য ত্রুটিযুক্ত কারণগুলি কেন নষ্ট হয়েছে তা বোঝার চেষ্টা করে Could not install packages due to an EnvironmentError: [Errno 1] Operation not permitted: '/bin/easy_install'। সেটআপ ফাইলটি সরিয়ে দেওয়া আমার
বিড়ম্বনা

1
@ কিপ 2 হ্যাঁ আপনি যথাযথভাবে উল্লেখ করেছেন, তাই আমি এই বিটটির উপরে জোর দেওয়ার জন্য উত্তরটি সম্পাদনা করেছি, অনুগ্রহ করে নোট করুন আন্ড্রেজি।
বুল.দেব

লক্ষ করার জন্য ধন্যবাদ। এটি কি আরও সঠিক হবে যদি আমি বলেছিলাম "মডিউলগুলি ইনস্টল করার পরে আপনার সেটআপ.cfg অপসারণ করা উচিত"?
AndreG

25

ওএসএক্স (ম্যাক) এ, / ভার / মাইপ্রজেক্ট নামে একটি প্রকল্প ফোল্ডার ধরে নিচ্ছেন

  1. cd /var/myproject
  2. নামক একটি ফাইল তৈরি করুন setup.cfgএবং যুক্ত করুন [install] prefix=
  3. চালান pip install <packagename> -t .

1
আমি নিশ্চিত না যে এটি কীভাবে @ আন্ড্রেজি উত্তর থেকে আলাদা
অ্যালাস্টার ম্যাককর্ম্যাক

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

12

হোমব্রিউ ব্যবহারকারীদের জন্য আরেকটি সমাধান হ'ল একটি ব্যবহার করা virtualenv

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


* আমি সমাধান বলি; সতর্কতার সাথে ভেন্ট ব্যবহার করার জন্য এটি কেবল অন্য প্রেরণা ...


3
বিশ্বাস করা যায় না এটি কেবল এক মাস আগে হয়েছিল। আমার নিজের প্রশ্নের উত্তর দিতে পেরেছি; সময়ের আগে ...
ওজেফোর্ড

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

3

আমি আশেপাশের অন্যান্য সুপারিশগুলির সাথে ত্রুটিগুলি আঘাত করেছি --install-option="--prefix=lib"। আমি যে জিনিসটিতে কাজ করেছি কেবল তা এখানেPYTHONUSERBASE বর্ণিত হিসাবে ব্যবহার করা হচ্ছে ।

export PYTHONUSERBASE=lib
pip install -I flask-restful --user

এটি হুবহু একই রকম নয় --target, তবে এটি যে কোনও ক্ষেত্রে আমার পক্ষে কৌশলটি করে।


2

অন্যান্য উল্লিখিত হিসাবে, এটি পাইপ এবং পাইথ সহ হোম বাগের সাথে পাইথন ইনস্টল করা হিসাবে পরিচিত।

যদি আপনি ~/.pydistutils.cfg"খালি উপসর্গ" নির্দেশনা দিয়ে ফাইল তৈরি করেন তবে এটি এই সমস্যার সমাধান করবে তবে এটি স্বাভাবিক পাইপ ক্রিয়াকলাপগুলি ভেঙে দেবে।

এই বাগটি সরকারীভাবে সমাধান না করা পর্যন্ত বিকল্পগুলির মধ্যে একটি হ'ল আপনার নিজস্ব বাশ স্ক্রিপ্ট তৈরি করা যা এই কেসটি পরিচালনা করবে:

 #!/bin/bash

 name=''
 target=''

 while getopts 'n:t:' flag; do
     case "${flag}" in
         n) name="${OPTARG}" ;;
         t) target="${OPTARG}" ;;
     esac
 done

 if [ -z "$target" ];
 then
     echo "Target parameter must be provided"
     exit 1
 fi

 if [ -z "$name" ];
 then
     echo "Name parameter must be provided"
     exit 1
 fi

 # current workaround for homebrew bug
 file=$HOME'/.pydistutils.cfg'
 touch $file

 /bin/cat <<EOM >$file
 [install]
 prefix=
 EOM
 # end of current workaround for homebrew bug

 pip install -I $name --target $target

 # current workaround for homebrew bug
 rm -rf $file
 # end of current workaround for homebrew bug

এই স্ক্রিপ্টটি আপনার আদেশটি মোড় করে এবং:

  1. নাম এবং লক্ষ্য পরামিতি গ্রহণ করে
  2. এই পরামিতিগুলি খালি কিনা তা পরীক্ষা করে দেখুন
  3. এতে ~/.pydistutils.cfg"খালি উপসর্গ" নির্দেশনা দিয়ে ফাইল তৈরি করে
  4. সরবরাহিত পরামিতিগুলির সাথে আপনার পাইপ কমান্ড কার্যকর করে
  5. ~/.pydistutils.cfgফাইল সরায়

এই স্ক্রিপ্টটি আপনার প্রয়োজনগুলির সমাধানের জন্য পরিবর্তন এবং মানিয়ে নেওয়া যেতে পারে তবে আপনি ধারণা পাবেন। এবং এটি আপনাকে পিপ ব্রেক না করেই আপনার কমান্ড চালানোর অনুমতি দেয়। আশা করি এটা সাহায্য করবে :)


2

আপনি যদি ভার্চুয়ালেনভ * ব্যবহার করছেন তবে আপনি যে ব্যবহার করছেন তা দ্বিগুণ করে নেওয়া ভাল ধারণা হতে পারে which pip

আপনি যদি /usr/local/bin/pipআপনার পরিবেশটি ভেঙে ফেলার মতো কিছু দেখতে পান । আপনার ভার্চুয়ালেনভকে পুনরায় সক্রিয় করা এটি ঠিক করবে:

VirtualEnv: $ source bin/activate

VirtualFish: $ vf activate [environ]

*: আমি ভার্চুয়াল ফিশ ব্যবহার করি তবে আমি ধরে নিই যে এই টিপটি উভয়ের সাথেই প্রাসঙ্গিক।


আমার অনুরূপ ক্ষেত্রে প্রকৃতপক্ষে
ভার্চুয়ালেনভকে

-1

আমারও তেমন একটা সমস্যা আছে। আমি ব্যবহার --system হিসাবে আমি decribe ত্রুটি এড়াতে পতাকা এখানে অন্যান্য থ্রেডে যেখানে আমি আমার পরিস্থিতির নির্দিষ্ট ঘটনাতে ব্যাখ্যা। আমি আশা করি এটি এখানে পোস্ট করে আশা করি যে কেউ একই সমস্যার মুখোমুখি হতে পারে।

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