"পাইপ ইনস্টল - ব্যবহারকারী ..." এর উদ্দেশ্য কী?


187

থেকে pip install --help:

 --user      Install to the Python user install directory for your platform. Typically ~/.local/, or %APPDATA%\Python on
             Windows. (See the Python documentation for site.USER_BASE for full details.)

সাইটের জন্য ডকুমেন্টেশন US ইউএস বিবিএসইএস আকর্ষণীয় * এনআইএক্স বিষয় যা আমি বুঝতে পারি না তা একটি ভয়ঙ্কর ওয়ার্মহোল।

--userসরল ইংরেজিতে উদ্দেশ্য কী ? প্যাকেজটি ইন্টেলিংয়ের ~/.local/বিষয়টি কেন গুরুত্বপূর্ণ? আমার $ PATH- এ কোথাও একটি এক্সিকিউটেবল রাখেন না কেন?


2
আপনি import site; print site.USER_SITEইনস্টল অবস্থান মুদ্রণ করতে পারেন । আমার জন্য /${HOME}/.local/lib/python${PY_MAJOR}.${PY_MINOR}/site-packages
ট্রেভর বয়ড স্মিথ

1
একটি হোস্ট মেশিন অন, /usr/local/lib/pythonX.X/dist-packagesদ্বারা ইনস্টল প্যাকেজের জন্য ডিফল্ট ডিরেক্টরি হল পিপ । তবে যদি কোনও ব্যবহারকারী ব্যবহারকারী-নির্দিষ্ট প্যাকেজ ইনস্টল করতে চান তবে তারা ব্যবহার করতে পারবেন $ sudo pip3 --user install some_package। এই প্যাকেজটি সেই গোষ্ঠী এবং অন্যদের কাছে অনুপলব্ধ থাকবে যারা এই হোস্টটি অ্যাক্সেস করে।
noobninja

উত্তর:


223

পাইপ ডিফল্ট সিস্টেম ডিরেক্টরিতে পাইথন প্যাকেজ ইনস্টল করতে (যেমন /usr/local/lib/python3.4)। এর জন্য রুট অ্যাক্সেস প্রয়োজন।

--user পরিবর্তে আপনার হোম ডিরেক্টরিতে পাইপ ইনস্টল প্যাকেজগুলি তৈরি করে, যার জন্য কোনও বিশেষ সুযোগ-সুবিধার দরকার নেই।


1
ধন্যবাদ; এটা বোধগম্য. তবে পয়েন্টটি --userযে কেউ প্যাকেজটিকে রুট হিসাবে চালাচ্ছে না তা নিশ্চিত করার বিষয়টি কী? (আমি গ্রুপ-অ্যাক্সেস নীতিগুলি সেট করার জন্য তারশার্ক / কিসমেট / বারপসুইট বিকল্পগুলির মতো অনুরূপ কিছুটি কল্পনা করছি, যার ফলে সমস্ত প্রোগ্রাম-বৈশিষ্ট্যগুলি রুট হিসাবে চলতে দেয় না that এটি কি সঠিক পথে?) বা --userবিকল্পটি কেবলমাত্র বোঝানো হয়েছে? মূল অধিকার ছাড়াই ইনস্টলেশন করার অনুমতি দেবেন ? যদি তা হয় তবে আমি কেন কখনও ব্যবহার করব না sudo pip install foo_package? পাইপের মাধ্যমে ইনস্টল করার জন্য আমি কখনই রুট-প্রাইভেজগুলির প্রয়োজন নেই।
রব ট্রুক্সাল

12
@ রব ট্রুক্সাল আমি মনে করি যে বিষয়টি হ'ল প্যাকেজটি অন্য ব্যবহারকারীদের দ্বারা দেখা হবে না। হতে পারে আপনি কোনও প্যাকেজের পুরানো / নতুন সংস্করণ চান তবে আপনি যদি এটি সিস্টেমে ইনস্টল করেন তবে আপনি আপনার কাজের সাথীদের উপহাস করতে চলেছেন।
এনডিডিথোজ

4
উহু! পরম --userব্যবহারকারী-বিচ্ছিন্নতা সম্পর্কে! এটি ইন্দ্রিয়ের একটি রেডিকুলাস এম্যাম্টের মতো করে তোলে। ধন্যবাদ @ এনডিথোস!
রব ট্রুক্সাল

ঠিক আছে এখানে একটি (নুবিশ) প্রশ্ন: ধরুন যে আমি একটি ব্যবহারকারী foo হিসাবে লগ ইন করেছি, এবং তারপরে আমি এই কমান্ড পিপটি ইনস্টল করলাম --user -r প্রয়োজনীয়.txt .. এবং সমস্ত কিছু ঠিকঠাক ইনস্টল করা আছে। তারপরে আমি ইউজার বার হিসাবে লগইন করেছি এবং অজগর প্রোগ্রামটি চালিয়েছি: সুডো-ফু ফু। বা কিভাবে কাজ করে?
অ্যাবড

1
বর্তমান ব্যবহারকারীর জন্য ইনস্টল থাকা প্যাকেজগুলি তালিকাভুক্ত করারও কি উপায় আছে? যেমন কিছু pip freeze --user?
Abbood

24

--user ইনস্টল ইন site.USER_SITE

আমার ক্ষেত্রে, এটি ছিল /Users/.../Library/Python/2.7/bin। সুতরাং আমি এটি আমার প্যাথে যোগ করেছি ( ~/.bash_profileফাইলটিতে):

export PATH=$PATH:/Users/.../Library/Python/2.7/bin

15

অন্যান্য উত্তর site.USER_SITEপাইথন প্যাকেজগুলি কোথায় রাখবে তা উল্লেখ করে । আপনি যদি বাইনারি খুঁজছেন তবে এগুলি ভিতরে যায়{site.USER_BASE}/bin

আপনি যদি শেলটির অনুসন্ধানের পথে এই ডিরেক্টরিটি যুক্ত করতে চান তবে ব্যবহার করুন:

export PATH="${PATH}:$(python3 -c 'import site; print(site.USER_BASE)')/bin"

13

কেবল একটি সতর্কতা:

এই ইস্যু অনুসারে , --userবর্তমানে ভার্চুয়াল এনভেসির ভিতরে বৈধ নয়pip , যেহেতু কোনও ব্যবহারকারীর অবস্থানটি ভার্চুয়াল পরিবেশের জন্য সত্যিকার অর্থে বোঝায় না।

সুতরাং pip install --user some_pkg ভার্চুয়াল পরিবেশের মধ্যে ব্যবহার করবেন না , অন্যথায়, ভার্চুয়াল পরিবেশ pipবিভ্রান্ত হবে। আরও তথ্যের জন্য এই উত্তর দেখুন ।


10

ইনস্টল করার সর্বোত্তম উপায় virtualenvএবং প্রয়োজন নেই--user বিভ্রান্তির । আপনি যখনই কোনও প্যাকেজ ইনস্টল করবেন তখনই আপনি পাইথন এবং বিভিন্ন পাইথন সংস্করণ এবং প্রকল্পগুলি ক্লোবার্বিংয়ের বিষয়ে চিন্তা করবেন না more

https://virtualenv.pypa.io/en/stable/


8

ম্যাকোজে, --userপতাকাটি ব্যবহারের কারণ হ'ল ওএস নির্ভর করে যে লাইব্রেরিগুলিকে আমরা দুর্নীতিগ্রস্থ করি না তা নিশ্চিত করা। অনেকগুলি ম্যাকোস ব্যবহারকারীদের জন্য একটি রক্ষণশীল পন্থা হ'ল প্রয়োজনীয় কমান্ডের সাথে পাইপ ইনস্টল বা আপডেট করা এড়ানো sudo। সুতরাং, এটি ইনস্টল করা অন্তর্ভুক্ত/usr/local/bin ...

রেফ: জ্যোতিষের জন্য পাইথন ইনস্টল করা ( https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python- for- Newovim )

আমি নই সব পরিষ্কার কেন মধ্যে ইনস্টল /usr/local/binম্যাক একটি ঝুঁকি যে সিস্টেম শুধুমাত্র পাইথন বাইনেরিতে উপর নির্ভর দেওয়া হয় /Library/Frameworks/এবং /usr/bin। আমি সন্দেহ করি কারণ এটি উপরে উল্লিখিত হিসাবে ইনস্টল করা /usr/local/binদরকার sudoযা সিস্টেম লাইব্রেরিগুলির সাথে ব্যয়বহুল ভুল করার দ্বার উন্মুক্ত করে। সুতরাং, মধ্যে ইনস্টল~/.local/bin এই ঝুঁকি এড়াতে একটি নিশ্চিত অগ্নি উপায়।

উল্লেখ: একটি ম্যাকতে পাইথন ব্যবহার করা ( https://docs.python.org/2/using/mac.html )

অবশেষে, ডিগ্রী সেখানে প্রবেশ প্যাকেজ ইনস্টল করার একটি সুবিধা /usr/local/bin, আমি ভাবছি যদি তা থেকে ডিরেক্টরি মালিক পরিবর্তন করার জ্ঞান করে তোলে rootকরতে user? এটি sudoসিস্টেম-নির্ভর পরিবর্তনগুলি থেকে রক্ষা করার সময় ব্যবহার করা এড়াতে পারে । * এটি কী সুরক্ষা ডিফল্ট হিসাবে পূর্বে ইউনিক্স সিস্টেমগুলি প্রায়শই ব্যবহৃত হত (সার্ভার হিসাবে)? বা সর্বনিম্ন, ম্যাক ব্যবহারকারীদের কোনও সার্ভার হোস্টিংয়ের পক্ষে যাওয়ার একটি ভাল উপায়?

* দ্রষ্টব্য: ম্যাকের সিস্টেম ইন্টিগ্রিটি প্রোটেকশন (এসআইপি) বৈশিষ্ট্যটি ব্যবহারকারীকে সিস্টেম-নির্ভর লাইব্রেরিগুলি পরিবর্তন করা থেকে রক্ষা করবে বলে মনে হচ্ছে।

- ই


8

ভার্চুয়াল পরিবেশ ছাড়াই

pip <command> --user সিস্টেম-ওয়াইড প্যাকেজ ইনস্টল অবস্থানের পরিবর্তে বর্তমান ব্যবহারকারী অ্যাকাউন্টের স্থানীয় পাইথন প্যাকেজ ইনস্টল লোকেশনে কাজ করতে বর্তমান পাইপ কমান্ডের সুযোগ পরিবর্তন করে which

এটি কেবলমাত্র একটি বহু-ব্যবহারকারী মেশিনে গুরুত্বপূর্ণ matters সিস্টেমের স্থানে ইনস্টল করা যেকোনো কিছুই সমস্ত ব্যবহারকারীর কাছে দৃশ্যমান হবে, সুতরাং ব্যবহারকারীর অবস্থানের সাথে ইনস্টল করা প্যাকেজ ইনস্টলেশনটিকে অন্য ব্যবহারকারীর থেকে পৃথক রাখবে (তারা এটি দেখতে পাবেন না এবং এটি ব্যবহারের জন্য এটিকে পৃথকভাবে ইনস্টল করতে হবে)। সংস্করণ দ্বন্দ্ব থাকতে পারে, তাই অন্যান্য প্যাকেজগুলির দ্বারা প্রয়োজনীয় নির্ভরতা সহ একটি প্যাকেজ ইনস্টল করা সমস্যার কারণ হতে পারে, সুতরাং প্রদত্ত ব্যবহারকারীর সমস্ত সিস্টেম প্যাকেজকে সিস্টেম ইনস্টল করার জায়গায় ঠেকানো ভাল না।

  • যদি এটি একটি একক-ব্যবহারকারী মেশিন হয় তবে লোকেশনটিতে ইনস্টল করার ক্ষেত্রে খুব কম বা কোনও পার্থক্য নেই --user। এটি অন্য একটি ফোল্ডারে ইনস্টল করা হবে, প্যাকেজ এবং এটি কীভাবে ব্যবহৃত হয়েছে তার উপর নির্ভর করে পাথের সাথে যুক্ত করার প্রয়োজন হতে পারে বা নাও হতে পারে (অনেক প্যাকেজ কমান্ড-লাইন সরঞ্জামগুলি ইনস্টল করে যা শেল থেকে চলার পথে থাকতে হবে) ।
  • যদি এটি কোনও মাল্টি-ইউজার মেশিন --userহয় তবে রুট / সুডো ব্যবহার করা বা প্রশাসক ইনস্টলেশন প্রয়োজন এবং প্রতিটি ব্যবহারকারীর পাইথন পরিবেশকে প্রভাবিত করতে পছন্দ করা হয়, সাধারণ প্যাকেজগুলির ক্ষেত্রে অ্যাডমিনিস্ট্রেটর ডিফল্টরূপে সমস্ত ব্যবহারকারীর জন্য উপলব্ধ করতে চান।
    • দ্রষ্টব্য: বেশিরভাগ মন্তব্য অনুসারে, বেশিরভাগ ইউনিক্স / লিনাক্স ইনস্টলগুলিতে এটি চিহ্নিত করা হয়েছে যে সিস্টেম ইনস্টলের ক্ষেত্রে সাধারণ প্যাকেজ ম্যানেজার ব্যবহার করা উচিত apt, পরিবর্তে pip

ভার্চুয়াল পরিবেশের সাথে ments

--userএকটি সক্রিয় venv / virtualenv পরিবেশে বিকল্প স্থানীয় ব্যবহারকারী পাইথন অবস্থান (একটি ভার্চুয়াল পরিবেশ ছাড়া হিসাবে একই) এর ইনস্টল হবে।

ভার্চুয়াল পরিবেশে প্যাকেজগুলি ডিফল্টরূপে ইনস্টল করা হয়, তবে আপনি --userএটি ব্যবহার করলে এটি ব্যবহারকারীর পাইথন স্ক্রিপ্ট ডিরেক্টরিতে ভার্চুয়াল পরিবেশের বাইরে ইনস্টল করতে বাধ্য করবে (উইন্ডোজে এটি বর্তমানে c:\users\<username>\appdata\roaming\python\python37\scriptsপাইথন ৩.7 রয়েছে)।

তবে, আপনি ভার্চুয়াল পরিবেশের মধ্যে থেকে কোনও সিস্টেম বা ব্যবহারকারী ইনস্টল অ্যাক্সেস করতে পারবেন না (এমনকি ভার্চুয়াল পরিবেশে --userথাকাকালীন আপনি ব্যবহার করেছেন )।

আপনি যদি --system-site-packagesযুক্তির সাহায্যে ভার্চুয়াল পরিবেশ ইনস্টল করেন তবে পাইথনের জন্য আপনার সিস্টেম স্ক্রিপ্ট ফোল্ডারে অ্যাক্সেস থাকবে। আমি বিশ্বাস করি এটিতে ব্যবহারকারীর পাইথন স্ক্রিপ্ট ফোল্ডারটিও অন্তর্ভুক্ত ছিল তবে আমি নিশ্চিত নই। তবে এর জন্য অনিচ্ছাকৃত পরিণতি হতে পারে এবং এটি ভার্চুয়াল পরিবেশ ব্যবহারের উদ্দেশ্যে করা উপায় নয়।


পাইথন সিস্টেম এবং স্থানীয় ব্যবহারকারী ইনস্টল ফোল্ডারগুলির অবস্থান

পাইথনের সাথে ব্যবহারকারীর ইনস্টল ফোল্ডারের অবস্থান আপনি খুঁজে পেতে পারেন python -m site --user-base। আমি প্রশ্নোত্তর এবং ডকুমেন্টেশনের মধ্যে বিবাদী তথ্য খুঁজে পাচ্ছি এবং ডিফল্টগুলি কী তা সম্পর্কে আমার পিসিতে আসলে এই আদেশটি ব্যবহার করছি তবে তারা ব্যবহারকারীর হোম ডিরেক্টরি নীচে রয়েছে ( ~* নিক্সের শর্টকাট এবং c:\users\<username>উইন্ডোজ সাধারণত)।


অন্যান্য বিস্তারিত

--userবিকল্প যে কমান্ড জন্য একটি বৈধ নয়। উদাহরণস্বরূপ pip uninstallপ্যাকেজগুলি যেখানেই ইনস্টল করা হয়েছিল সেগুলি সন্ধান এবং আনইনস্টল করবে (ব্যবহারকারী ফোল্ডারে, ভার্চুয়াল এনভায়রনমেন্ট ফোল্ডার ইত্যাদি) এবং --userবিকল্পটি বৈধ নয়।

ইনস্টল হওয়া জিনিসগুলি pip install --userস্থানীয় অবস্থানে ইনস্টল করা হবে যা কেবলমাত্র বর্তমান ব্যবহারকারী অ্যাকাউন্ট দ্বারা দেখা যাবে এবং রুট অ্যাক্সেস (* নিক্সে) বা প্রশাসকের অ্যাক্সেসের প্রয়োজন হবে না (উইন্ডোজে)।

--userবিকল্প মডিফাই সব pip কমান্ড যে এটি দেখতে গ্রহণ / ব্যবহারকারী কাজ ফোল্ডারের ইনস্টল করুন, তাই যদি আপনি ব্যবহার pip list --userএটা হবে শুধুমাত্র দেন আপনার সাথে ইনস্টল করা প্যাকেজ pip install --user


1
আপনি প্রথম অংশ rephrasing বিবেচনা করবেন? পাইথনের ভার্চুয়াল পরিবেশের বাইরে সম্পূর্ণরূপে ব্যবহার pip installনা করা ভাল --user। এটি পাইথন প্যাকেজগুলি সেই জায়গাগুলিতে ইনস্টল করবে যা সত্যই সিস্টেমের প্যাকেজ ম্যানেজারের কাছে রেখে দেওয়া উচিত (উদাহরণস্বরূপ aptদেবিয়ান / উবুন্টুতে)। এটির সাথে ঝামেলা না করা ভাল, এটি এতগুলি সমস্যার দিকে পরিচালিত করে। যদি পাইথন প্যাকেজটি সমস্ত ব্যবহারকারীর জন্য উপলব্ধ হওয়ার দরকার হয় তবে অপারেটিং সিস্টেমের প্যাকেজ ম্যানেজারটি ব্যবহার করুন, তবে করবেন না sudo pip install ...। একটি বিকল্প হয় sudo pip install --target ...। উইন্ডোজ এটি ইস্যু কম হয়।
sinoroc

ঠিক আছে - আপনি 'ভার্চুয়াল পরিবেশ ছাড়াই' বিভাগে চূড়ান্ত বুলেট পয়েন্টের দ্বিতীয়ার্ধ বলতে চান? তা না হলে কোন নির্দিষ্ট অংশ? (এই আপডেটের জন্য এটি সরাসরি সম্পাদনা করতে নির্দ্বিধায় মনে হয়, আমি প্রাথমিকভাবে * নিক্স ব্যবহারকারী নই)
লাইটসিসি

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

@ সিনোরোক আমি সেই অনুচ্ছেদে একটি নোট যুক্ত করেছি। এটিকে আরও সুনির্দিষ্ট ইত্যাদি হিসাবে আপডেট করার জন্য নির্দ্বিধায় বা আমার সাথে একই শব্দ যুক্ত থাকলে অন্যত্র সম্পাদনা করুন edit
লাইটসিসি

1

আমার $ PATH- এ কোথাও কোনও এক্সিকিউটেবল রাখেন না

~/.local/bin directoryতাত্ত্বিকভাবে আপনার হতে পারে বলে আশা করা হচ্ছে $PATH

মতে এই ব্যক্তিদের এটি একটি বাগ সংশোধন এর মধ্যে এটি যোগ না $PATHযখন ব্যবহার systemd

এই উত্তরটি আরও বিস্তৃতভাবে ব্যাখ্যা করে।

কিন্তু এমনকি যদি আপনার ডিস্ট্রো রয়েছে~/.local/bin ডিরেক্টরির করতে$PATH , এটি নিম্নলিখিত ফর্ম (ভিতরে হতে পারে ~/.profile):

if [ -d "$HOME/.local/bin" ] ; then
    PATH="$HOME/.local/bin:$PATH"
fi

ডিরেক্টরিটি আগে না থাকলে আপনাকে লগআউট এবং আবার লগইন করতে হবে।

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