পাইপ সহ স্থানীয় ফাইল সিস্টেম ফোল্ডার থেকে ভার্চুয়ালনেভে পাইথন প্যাকেজ ইনস্টল করা


346

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

আমি python setup.py sdistআমার প্যাকেজটির জন্য দৌড়েছি , যা উপযুক্ত tar.gz ফাইল তৈরি করেছে। এই ফাইলটি আমার সিস্টেমে সঞ্চয় করা আছে /srv/pkg/mypackage/mypackage-0.1.0.tar.gz

এখন ভার্চুয়াল পরিবেশে আমি পাইপি থেকে বা নির্দিষ্ট স্থানীয় অবস্থান থেকে প্যাকেজগুলি ইনস্টল করতে চাই /srv/pkg

এটা কি সম্ভব?

পিএস আমি জানি যে আমি নির্দিষ্ট করতে পারি pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz। এটি কাজ করবে, তবে /srv/pkgআমি টাইপ করলে পাইপের জন্য অন্য জায়গা হিসাবে অবস্থানটি ব্যবহার করার কথা বলছি pip install mypackage


আমি ডাব্লুএইচএল হুইল থেকে সেটআপ.পি ছাড়াই একটি পাইপি প্যাকেজ ইনস্টল করতে চেয়েছিলাম এবং আমি আমার পাইথন সংস্করণটির জন্য একটি সঠিক সংস্করণ ডাউনলোড করার পরে এটি ইনস্টল হয়ে গেছে pip install <Path-to-WHL-file>
উইক্টর স্ট্রিবিউ

উত্তর:


136

আমি নিশ্চিত যে আপনি যা খুঁজছেন তাকে --find-linksঅপশন বলে।

যদিও index.htmlআপনার স্থানীয় প্যাকেজ সূচকটির জন্য আপনাকে একটি ডামি তৈরি করতে হবে যা সমস্ত প্যাকেজের লিঙ্কগুলি তালিকাভুক্ত করে। এই সরঞ্জাম সাহায্য করে:

https://github.com/wolever/pip2pi


100
pip install mypackage --no-index --find-links file:///srv/pkg/mypackageকাজ করা উচিত.
jfs

1
এটি সাহায্য করে। এবং এটি স্থানীয় পিপিআই হিসাবে বিবেচনা করার জন্য আমরা পাইপ -i বিকল্পটি ব্যবহার করতে পারি ।
ডায়াবলনেও

সমতুল্য ইজি_ইনস্টল কমান্ডটি হ'লeasy_install --allow-hosts=None --find-links file:///srv/pkg/mypackage mypackage
উইলফ্রেড হিউজেস

আমাকে উত্স বিতরণ ফাইলটি তৈরি করতে হয়েছিল এটি কাজ করার আগে কেবল এটি প্রকল্প বা প্যাকেজ ডিরেক্টরিতে নির্দেশ করে না। এটি আমাকে ছিটকে গেল। docs.python.org/3.6/distutils/sourcedist.html
জোশ

3
নোট করুন যে --find-linksপ্যাকেজটি নির্দিষ্ট স্থানে পাওয়া না গেলে বা কোনও নতুন সংস্করণ উপলভ্য থাকলে পিআইপিআই-তে অনুসন্ধানের অনুমতি দেবে। উইন্ডোজে, আমি দেখতে পেলাম যে এর সাথে --only-binary=packagename(বা --only-binary=:all:) একত্রিত করা অসাধারণভাবে কার্যকর। এটি পাইপকে কেবল পাইপিআই-তে উত্স বন্টন (এবং এইভাবে সংকলন প্রয়োজন) সহ কোনও প্যাকেজ ডাউনলোড করার চেষ্টা থেকে বাধা দেয়, যা আমাকে ডিরেক্টরি থেকে ইনস্টল করার চেষ্টা করার সবচেয়ে সাধারণ কারণ। বিপরীতে --no-index, আমি এখনও পাইপিআই থেকে অন্যান্য প্যাকেজ ইনস্টল করতে পারি ।
jpmc26

463

কি সম্পর্কে::

pip install --help
...
  -e, --editable <path/url>   Install a project in editable mode (i.e. setuptools
                              "develop mode") from a local project path or a VCS url.

যেমন, pip install -e /srv/pkg

যেখানে / srv / pkg শীর্ষ-স্তরের ডিরেক্টরি যেখানে 'setup.py' খুঁজে পাওয়া যায়।


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

3
@ মার্কোদিনাচ্চি এর মজার বিষয় --editableহ'ল এটি মনে হয় যে এটি স্থানীয় প্যাকেজটির ডিরেক্টরিটি দেখে এবং উত্সটিকে গিট রেপো হিসাবে সেট করে মনে হয় - কেবল একটি ফোল্ডারের চেয়ে কিছুটা নমনীয়। যদিও এর জন্য আমি ডকুমেন্টেশন পাচ্ছি না।
নোটসিমন

3
যদিও এটি কোনও নির্দিষ্ট প্যাকেজ ইনস্টল করার জন্য সঠিক, বিশেষত একটি স্থানীয় মেশিন বা ভিসিএস ইউআরএলে বর্তমান / নিবিড় বিকাশের ক্ষেত্রে। এটি নির্দিষ্ট প্যাকেজ উত্সের বিপরীতে সমস্ত স্থানীয় প্যাকেজ উত্সগুলির জন্য পিতামাতার ডিরেক্টরি অনুসন্ধান সম্পর্কে প্রশ্নের উত্তর দেয় না । আপনি যখন পাইপ ইনস্টল করতে চান এমন একাধিক প্যাকেজ সহ ডিরেক্টরি বা ইউআরএল রয়েছে তখন গৃহীত উত্তরটি কাজ করে।
গ্যাভিন

@ মার্কোদিনাচ্চি যাইহোক, ধরুন কোনও ব্যবহারকারী কোড ডাউনলোড করেন। তারা প্রোগ্রামটি যেখানে রাখতে চায় সেখানে রেখে দেয়, যদি তারা বুদ্ধিমান হয়। তারা কেন এটি সরানো চাইবে?
জেলফির কালটসটহল

1
@ সিমন পিপকে গিটার রেপো না খুঁজার উপায় আছে কি? যদি আমি do pip install -eএটি গিট রিমোট থেকে কোডটি পরীক্ষা করে দেখি তবে কোডটি যেমন হয় তেমন ইনস্টল করতে চাই (রিমোটে এখনও পরিবর্তন হয়নি)।
পেড্রু

39

আমি ইনস্টল করছি pyfuzzyতবে পিপিআইতে নেই; এটিকে আরো ফেরৎ: No matching distribution found for pyfuzzy

আমি গৃহীত উত্তর চেষ্টা করেছিলাম

pip install  --no-index --find-links=file:///Users/victor/Downloads/pyfuzzy-0.1.0 pyfuzzy

তবে এটি কোনও কাজ করে না এবং নিম্নলিখিত ত্রুটিটি প্রদান করে:

সূচি উপেক্ষা: https://pypi.python.org/simple সংগ্রহ পাইফুজি পাইফুজি প্রয়োজনীয়তা পূরণ করে এমন সংস্করণ খুঁজে পেল না (সংস্করণ থেকে:) পাইফুজের জন্য কোনও মিল খুঁজে পাওয়া যায় নি

শেষ পর্যন্ত, আমি সেখানে একটি সহজ ভাল উপায় পেয়েছি: https://pip.pypa.io/en/latest/references/pip_install.html

Install a particular source archive file.
$ pip install ./downloads/SomePackage-1.0.4.tar.gz
$ pip install http://my.package.repo/SomePackage-1.0.4.zip

সুতরাং নিম্নলিখিত কমান্ডটি আমার পক্ষে কাজ করেছে:

pip install ../pyfuzzy-0.1.0.tar.gz.

আশা করি, এটা তোমাকে সাহায্য করবে।


4
এটি আমার পক্ষে কাজ করেছে। আমি অন্যান্য পদ্ধতির চেষ্টা করেছি এবং Could not find a version that satisfiesভুল করে হোঁচট খেয়েছি। ধন্যবাদ।
রাইয়ার

21

এই সমাধানটিই আমি ব্যবহার করে শেষ করেছি:

import pip


def install(package):
    # Debugging
    # pip.main(["install", "--pre", "--upgrade", "--no-index",
    #         "--find-links=.", package, "--log-file", "log.txt", "-vv"])
    pip.main(["install", "--upgrade", "--no-index", "--find-links=.", package])


if __name__ == "__main__":
    install("mypackagename")
    raw_input("Press Enter to Exit...\n")

আমি থেকে এই একসঙ্গে উদঘাটিত পিপ উদাহরণ ইনস্টল সেইসাথে থেকে Rikard এর উত্তর উপর অপর এক প্রশ্নের । "--Pre" যুক্তি আপনাকে অ-উত্পাদন সংস্করণ ইনস্টল করতে দেয়। "- কোন সূচক" যুক্তি পিপিআই ইনডেক্সগুলি অনুসন্ধান করা এড়িয়ে চলে। "--ফাইন্ড-লিঙ্কস ="। স্থানীয় ফোল্ডারে আর্গুমেন্ট অনুসন্ধান করে (এটি আপেক্ষিক বা পরম হতে পারে)। আমি ডিবাগিংয়ের জন্য "--log-file", "log.txt" এবং "-vv" যুক্তি ব্যবহার করেছি। "- আপগ্রেড" যুক্তি আপনাকে পুরানোগুলির চেয়ে নতুন সংস্করণ ইনস্টল করতে দেয়।

এগুলি আনইনস্টল করার জন্য আমি একটি ভাল উপায়ও পেয়েছি। আপনার বেশ কয়েকটি পৃথক পাইথন পরিবেশ থাকলে এটি কার্যকর। এটি একই বেসিক ফর্ম্যাট, অনিচ্ছাকৃত আনইনস্টলগুলি রোধ করতে সুরক্ষা ব্যবস্থা সহ "ইনস্টল" এর পরিবর্তে "আনইনস্টল" ব্যবহার করে:

import pip


def uninstall(package):
    response = raw_input("Uninstall '%s'? [y/n]:\n" % package)
    if "y" in response.lower():
        # Debugging
        # pip.main(["uninstall", package, "-vv"])
        pip.main(["uninstall", package])
    pass


if __name__ == "__main__":
    uninstall("mypackagename")
    raw_input("Press Enter to Exit...\n")

স্থানীয় ফোল্ডারে এই ফাইলগুলি রয়েছে: ইনস্টল.পি, আনইনস্টল.পি, মাইপ্যাকেজ নেম-1.0.zip


1
ধন্যবাদ। "--ফাইন্ড-লিঙ্কগুলি ="। এবং "--no-index", যেখানে আমার ইউটিলিটি-প্যাকেজের অভ্যন্তরে পাইথন-স্ক্রিপ্ট একসাথে কাটানোর চাবিকাঠিটি প্রথমে সাইট-প্যাকেজগুলি থেকে পুরানো সংস্করণ-প্যাকেজটি সরিয়ে দেয় এবং তারপরে একটি সাবডির থেকে একটি tar.gz'ed প্যাকেজ ইনস্টল করে where ইউটিলিটি-প্যাকেজ-ফোল্ডারটির (--find-links =। সম্পর্কে জানতেন না), পরে চাকাটি তৈরি করে এবং এটি ইনস্টল করে। সমস্ত প্লাম্বামের মাধ্যমে স্বয়ংক্রিয় এবং ক্লিক করুন। যদি কেউ এটি চায় তবে আমি একটি লিঙ্ক পোস্ট করব। সম্মত।
জ্যাকলিমারডিউর

15

একটি বিকল্প - ফাইন্ড-লিঙ্কগুলি কাজ করে এবং এটি requirements.txtফাইল থেকে কাজ করে !

আপনি কিছু ফোল্ডারে প্যাকেজ সংরক্ষণাগার রাখতে পারেন এবং প্রয়োজনীয় ফাইলটি পরিবর্তন না করে সর্বশেষতম নিতে পারেন, উদাহরণস্বরূপ requirements:

.
└───requirements.txt
└───requirements
    ├───foo_bar-0.1.5-py2.py3-none-any.whl
    ├───foo_bar-0.1.6-py2.py3-none-any.whl
    ├───wiz_bang-0.7-py2.py3-none-any.whl
    ├───wiz_bang-0.8-py2.py3-none-any.whl
    ├───base.txt
    ├───local.txt
    └───production.txt

এখন requirements/base.txtরাখা:

--find-links=requirements
foo_bar
wiz_bang>=0.8

মালিকানা প্যাকেজগুলি আপডেট করার একটি ঝরঝরে উপায়, ফোল্ডারে কেবল নতুন একটি ড্রপ করুন

এইভাবে আপনি একই একক কল দিয়ে local folderAND থেকে প্যাকেজ ইনস্টল করতে পারেন pypi:pip install -r requirements/production.txt

পুনশ্চ. প্রয়োজনীয়তাগুলি কীভাবে বিভক্ত করতে হয় এবং ফোল্ডার ভিত্তিক প্রয়োজনীয় সংস্থাগুলি কীভাবে ব্যবহার করতে হয় তা দেখতে আমার কুকিকিটার-জ্যাঙ্গোপ্যাকেজ কাঁটাচামড়া দেখুন।


ধন্যবাদ, আমি যা করার কথা ভাবছিলাম তার থেকে এটি আরও ভাল!
গেছে

12

থেকে ইনস্টল করার-প্যাকেজ পৃষ্ঠা আপনি কেবল চালাতে পারেন:

পিপ ইনস্টল / এসআরভি / পিকেজি / মাইপ্যাকেজ

যেখানে / srv / pkg / mypackage ডিরেক্টরিটি সেটআপ.পি রয়েছে


অতিরিক্ত 1 , আপনি সংরক্ষণাগার ফাইল থেকে এটি ইনস্টল করতে পারেন:

পাইপ ইনস্টল ./mypackage-1.0.4.tar.gz

1 যদিও প্রশ্নে উল্লেখ করা হয়েছে, এর জনপ্রিয়তার কারণে এটিও অন্তর্ভুক্ত রয়েছে।


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

6

ধরে নিচ্ছি আপনার কাছে ভার্চুয়ালেনভ এবং একটি requirements.txtফাইল রয়েছে, তবে আপনি এই ফাইলটির ভিতরে প্যাকেজগুলি কোথায় পাবেন তা নির্ধারণ করতে পারেন:

# Published pypi packages 
PyJWT==1.6.4
email_validator==1.0.3
# Remote GIT repo package, this will install as django-bootstrap-themes
git+https://github.com/marquicus/django-bootstrap-themes#egg=django-bootstrap-themes
# Local GIT repo package, this will install as django-knowledge
git+file:///soft/SANDBOX/python/django/forks/django-knowledge#egg=django-knowledge

5

ডিরেক্টরিতে requirements.txtএবং egg_dirডিরেক্টরি হিসাবে প্রয়োজনীয়তা রয়েছে

আপনি আপনার স্থানীয় ক্যাশে তৈরি করতে পারেন:

$ pip download -r requirements.txt -d eggs_dir

তারপরে, "ক্যাশে" ব্যবহার করা সহজ:

$ pip install -r requirements.txt --find-links=eggs_dir


1

কেবল স্থানীয় থেকে ইনস্টল করতে আপনার 2 টি বিকল্প প্রয়োজন:

  • --find-links: নির্ভরতা সন্ধান করতে যেখানে। file://অন্যের দ্বারা বর্ণিত উপসর্গের প্রয়োজন নেই ।
  • --no-index: অনুপস্থিত নির্ভরতাগুলির জন্য পাইপি সূচকগুলিতে তাকাবেন না (নির্ভরতা ইনস্টল করা হয়নি এবং --find-linksপথে নেই)।

সুতরাং আপনি নিম্নলিখিত যে কোনও ফোল্ডার থেকে চালাতে পারেন:

pip install --no-index --find-links /srv/pkg /path/to/mypackage-0.1.0.tar.gz

যদি আপনার মাইপ্যাকেজটি সঠিকভাবে সেটআপ করা থাকে তবে এটি তার সমস্ত নির্ভরতা তালিকাভুক্ত করে এবং আপনি যদি নির্ভরতার ক্যাসকেড ডাউনলোড করতে পাইপ ডাউনলোড ব্যবহার করেন (অর্থাত্ হতাশার নির্ভরতা ইত্যাদি), তবে সমস্ত কিছুই কার্যকর হবে।

আপনি pypi সূচক ব্যবহার করেন এটি অ্যাক্সেসযোগ্য হয়, কিন্তু যদি না স্থানীয় কায়দা ফলব্যাক করতে চান তাহলে, আপনি অপসারণ করতে পারেন --no-indexযোগ --retries 0। আপনি কিছুক্ষণের জন্য পাইপ বিরতি দেখতে পাবেন যখন অনুপস্থিত নির্ভরতার জন্য পাইপ্পি যাচাই করার চেষ্টা করা হচ্ছে (একজন ইনস্টল করা নেই) এবং এটি যখন এটির কাছে পৌঁছতে পারে তখন এটি স্থানীয়টিতে পড়ে যাবে। "প্রথমে স্থানীয়গুলি অনুসন্ধান করুন, তারপরে সূচকটি" পিপ বলতে কোনও উপায় বলে মনে হচ্ছে না।


-1

আমি সত্যিই সাধারণ কিছু অর্জন করার চেষ্টা করছি এবং খারাপভাবে ব্যর্থ হয়েছি, সম্ভবত আমি বোকা।

যাইহোক, যদি আপনার কাছে কোনও স্ক্রিপ্ট থাকে / Dockerfileযা পাইথন প্যাকেজ জিপ ফাইল ডাউনলোড করে (যেমন গিটহাব থেকে) এবং আপনি এটি ইনস্টল করতে চান file:///তবে নীচের উদাহরণে প্রদর্শিত হিসাবে এটি ইনস্টল করতে আপনি উপসর্গটি ব্যবহার করতে পারেন :

$ wget https://example.com/mypackage.zip
$ echo "${MYPACKAGE_MD5}  mypackage.zip" | md5sum --check -
$ pip install file:///.mypackage.zip

দ্রষ্টব্য : আমি জানি যে আপনি সরাসরি ব্যবহার করে প্যাকেজটি ইনস্টল করতে পারেন pip install https://example.com/mypackage.zipতবে আমার ক্ষেত্রে আমি চেকসামটি যাচাই করতে চেয়েছিলাম (কখনই যথেষ্ট প্যারানয়েড নয়) এবং পাইপ সরবরাহ করে এমন বিভিন্ন বিকল্প / #md5টুকরোটি ব্যবহার করার চেষ্টা করার সময় আমি খারাপভাবে ব্যর্থ হয়েছি ।

সরাসরি এর সাথে এত সহজ কিছু করতে অবাক করা হতাশার কারণ pip। আমি কেবল একটি চেকসাম পাস করতে চেয়েছি এবং এটি ইনস্টল করার আগে জিপটি মিলছিল pipকিনা তা যাচাই করেছিলাম।

আমি সম্ভবত খুব বোকা কিছু করছিলাম তবে শেষ পর্যন্ত আমি হাল ছেড়ে দিয়ে এটিকে বেছে নিয়েছিলাম। আমি আশা করি এটি অন্যদের অনুরূপ কিছু করার চেষ্টা করছে helps

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