নির্ভরতা হিসাবে গিট রেপো অন্তর্ভুক্ত করতে কীভাবে সেটআপ.পি লিখতে হয়


95

আমি setup.pyআমার প্যাকেজটির জন্য লেখার চেষ্টা করছি । আমার প্যাকেজটির জন্য অন্য গিট রেপোর উপর নির্ভরতা নির্দিষ্ট করা দরকার।

আমার এ পর্যন্ত যা আছে:

from setuptools import setup, find_packages

setup(
    name='abc',
    packages=find_packages(),
    url='https://github.abc.com/abc/myabc',
    description='This is a description for abc',
    long_description=open('README.md').read(),
    install_requires=[
        "requests==2.7.0",
        "SomePrivateLib>=0.1.0",
        ],
    dependency_links = [
     "git+git://github.abc.com/abc/SomePrivateLib.git#egg=SomePrivateLib",
    ],
    include_package_data=True,
)

আমি যখন চালাচ্ছি:

pip install -e https://github.abc.com/abc/myabc.git#egg=analyse

আমি পাই

প্রয়োজনীয়তাটি পূরণ করে এমন কোনও সংস্করণ খুঁজে পেল না যা সাম্প্রাইভেটলিব> = 0.1.0 (বিশ্লেষণ থেকে) (সংস্করণগুলি থেকে)) সাম্প্রাইভেটলিব> = 0.1.0 (বিশ্লেষণ থেকে) এর সাথে কোনও মিল খুঁজে পাওয়া যায় নি

আমি কি ভুল করছি ?


নোট করুন যে সেটআপ.পি এবং পাইপ সম্পূর্ণ আলাদা সিস্টেম। আমার একটি সমস্যা ছিল তা হ'ল আমি পাইপটির জন্য এই কাজটি করতে সক্ষম হয়েছি তবে সেটআপ.পাইয়ের জন্য নয়।
বাইক্যাটল

উত্তর:


50

এটি করার সঠিক উপায় আপনি এখানে পেতে পারেন ।

dependency_links=['http://github.com/user/repo/tarball/master#egg=package-1.0']

মূলটি হ'ল গিট সংগ্রহস্থলের কোনও লিঙ্ক দেওয়া নয়, তবে একটি টারবালের লিঙ্ক। গিথুব আপনার জন্য মাস্টার ব্রাঞ্চের একটি টারবাল তৈরি করে যদি আপনি /tarball/masterউপরে বর্ণিত হিসাবে সংযোজন করেন।


17
দেখে মনে হচ্ছে এই পদ্ধতিটি প্রতি github.com/pypa/pip/issues/3939
মিউন

4
এই পদ্ধতিটি ব্যক্তিগত সংগ্রহস্থলগুলির জন্যও অকেজো, যেহেতু অনুমোদনের কোনও উপায় নেই।
tedivm

4
আমি এটি কাজ করতে পরিচালিত করেছি এবং অন্য একটি উত্তর যুক্ত করেছি।
tedivm

4
/tarball/masterপদ্ধতি gitlab জন্য কাজ করে না
মার্টিন Thoma

4
অবচয়। সঠিক উত্তরটি নীচে @ ডিক ফক্সের দ্বারা জবাব দেওয়া Pep508 ব্যবহার করা
সুইমবাইক রুন

104

উপরের মন্তব্যে @ মুন দ্বারা সংযুক্ত পাইপ ইস্যু 3939 খননের পরে এবং পিইপি -508 নির্দিষ্টকরণের পরে , আমি setup.pyএই স্পেসিফিকেশন প্যাটার্নটি install_requires(আর নেই dependency_links) ব্যবহার করে আমার ব্যক্তিগত রেপো নির্ভরতা পাওয়ার জন্য সাফল্য পেয়েছি :

install_requires = [
  'some-pkg @ git+ssh://git@github.com/someorgname/pkg-repo-name@v1.1#egg=some-pkg',
]

@v1.1GitHub তে তৈরি মুক্তি ট্যাগ ইঙ্গিত এবং একটি শাখা, কমিট, অথবা ট্যাগ বিভিন্ন ধরনের দিয়ে প্রতিস্থাপিত করা যেতে পারে।


দ্রষ্টব্য: এটি স্থানীয় / বেসরকারী প্যাকেজগুলির জন্য সূক্ষ্মভাবে কাজ করে, তবে আপনি পিআইপিআই-তে কোনও প্যাকেজ প্রকাশ করতে পারবেন না যা এই সিনট্যাক্সটিকে তার সেটআপ.পিতে ব্যবহার করে
ব্রায়ান

7
@ ব্রায়ান আপনি দয়া করে অফিসিয়াল স্টেটমেন্টের একটি লিঙ্ক সরবরাহ করতে পারেন?
এলিফ্যান্ট

11
নোট আপনি git+https://github.comএসএসএইচ ব্যবহার করতে না চাইলে করতে পারেন do
multithr3at3d

4
সুতরাং - আপগ্রেড করার জন্য সঠিক পন্থাটি কী? যদিও আমি একটি ট্যাগ সংস্করণ নির্দিষ্ট করেছি তবে একটি আপগ্রেড কেবল নতুন ট্যাগ সংস্করণগুলিকে উপেক্ষা করে
পিয়েন্তে

4
@ এলিফ্যান্ট সুপার অফিশিয়াল নন, তবে পিআইপিএর প্রকৃত সদস্যদের থেকে পিপ গিটহাব প্রকল্পের জন্য এগুলি কমপক্ষে মন্তব্য করেছেন: github.com/pypa/pip/issues/4187#issuecomment-415667805 এবং আরও ব্যাখ্যা: github.com/pypa/pip / ইস্যু / 4187 # জারি - 415067034
ডমিনিক

19

নিম্নলিখিত উত্তরটি পিপ 19+ এর জন্য অবচিত করা হয়েছে


দুর্ভাগ্যক্রমে অন্য উত্তরটি ব্যক্তিগত সংগ্রহস্থলগুলির সাথে কাজ করে না, যা এটির জন্য সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে। অবশেষে আমি এটিকে setup.pyদেখতে এমন একটি ফাইল দিয়ে কাজ করতে পেরেছি:

from setuptools import setup, find_packages

setup(
    name = 'MyProject',
    version = '0.1.0',
    url = '',
    description = '',
    packages = find_packages(),
    install_requires = [
        # Github Private Repository - needs entry in `dependency_links`
        'ExampleRepo'
    ],

    dependency_links=[
        # Make sure to include the `#egg` portion so the `install_requires` recognizes the package
        'git+ssh://git@github.com/example_organization/ExampleRepo.git#egg=ExampleRepo-0.1'
    ]
)

পাইপের নতুন সংস্করণগুলি "depend depend__link" ব্যবহারের প্রয়োজনীয়তা অপসারণ করে এটিকে আরও সহজ করে তোলে -

from setuptools import setup, find_packages

setup(
    name = 'MyProject',
    version = '0.1.0',
    url = '',
    description = '',
    packages = find_packages(),
    install_requires = [
        # Github Private Repository
        'ExampleRepo @ git+ssh://git@github.com/example_organization/ExampleRepo.git#egg=ExampleRepo-0.1'
    ]
)

4
আপনার দয়া করে কী -0.1বোঝাতে পারেন দয়া করে? আপনি কি গিট রিলিজ থেকে বা setup.pyবিবরণ থেকে সংস্করণ নম্বরটি গ্রহণ করেন ?
পিটারিস

4
সেটআপ.পি ফাইল থেকে- আপনি যদি কোনও নির্দিষ্ট শাখা ব্যবহার করতে চান বা ট্যাগ করতে চান তবে জিনিসগুলিকে কিছুটা আলাদাভাবে ফর্ম্যাট করুন।
tedivm

"দুর্ভাগ্যবশত অন্যান্য উত্তর বেসরকারী সংগ্রহস্থলগুলির সাথে কাজ না" এই আর সত্য ফক্স ছাড়াই উত্তর বেসরকারী রেপো উপর কাজ করে dependency_links(যা হয় অবচিত )
Keto

ধন্যবাদ @ কেতো! আমি জানি না কেন আপনার সম্পাদনাগুলি মোডগুলি ছাড়াও প্রত্যাখ্যান করা হয়েছিল, তবে আমি এগিয়ে গিয়ে উত্তরটিতে অবমূল্যায়ন বিজ্ঞপ্তি যুক্ত করতে সেই প্রত্যাখাতাকে অগ্রাহ্য করেছি।
টিডিভম

3

আরও সাধারণ উত্তর, প্রয়োজনীয় তথ্য.টিএসটি ফাইল থেকে আমি তথ্য পেতে পারি:

from setuptools import setup, find_packages
from os import path

loc = path.abspath(path.dirname(__file__))

with open(loc + '/requirements.txt') as f:
    requirements = f.read().splitlines()

required = []
dependency_links = []
# do not add to required lines pointing to git repositories
EGG_MARK = '#egg='
for line in requirements:
    if line.startswith('-e git:') or line.startswith('-e git+') or \
            line.startswith('git:') or line.startswith('git+'):
        if EGG_MARK in line:
            package_name = line[line.find(EGG_MARK) + len(EGG_MARK):]
            required.append(package_name)
            dependency_links.append(line)
        else:
            print('Dependency to a git repository should have the format:')
            print('git+ssh://git@github.com/xxxxx/xxxxxx#egg=package_name')
    else:
        required.append(line)

setup(
    name='myproject',  # Required
    version='0.0.1',  # Required
    description='Description here....',  # Required
    packages=find_packages(),  # Required
    install_requires=required,
    dependency_links=dependency_links,
) 

1

প্রকৃতপক্ষে যদি আপনি আপনার প্যাকেজগুলি পুনরূদ্ধারযোগ্যভাবে পুনরায় ইনস্টলযোগ্য করতে চান (ইয়োরকোরেন্টপ্যাকেজটি আপনার সাম্প্রাইভেটলিব অন্তর্ভুক্ত করে), যেমন আপনি যখন আপনার কন্ট্রোলপ্যাকেজকে অন্য একটিতে অন্তর্ভুক্ত করতে চান (যেমন আউটারপ্যাকেজ -> আপনারকোরেন্টপ্যাকেজ -> সাম্প্রাইভেটলিব) আপনার উভয়ের প্রয়োজন হবে:

install_requires=[
    ...,
    "SomePrivateLib @ git+ssh://github.abc.com/abc/SomePrivateLib.git@0.1.0#egg=SomePrivateLib"
],
dependency_links = [
    "git+ssh://github.abc.com/abc/SomePrivateLib.git@0.1.0#egg=SomePrivateLib"
]

এবং নিশ্চিত করুন যে আপনার সংস্করণ নম্বরটি দিয়ে একটি ট্যাগ তৈরি করেছেন।

এছাড়াও যদি আপনার গিট প্রকল্পটি ব্যক্তিগত হয় এবং আপনি এটি ধারক যেমন ডকার বা গিটল্যাব রানারটির মধ্যে ইনস্টল করতে চান তবে আপনার রেপোতে অনুমোদিত অ্যাক্সেসের প্রয়োজন হবে। অ্যাক্সেস টোকেন সহ গিট + https ব্যবহার করার বিষয়ে দয়া করে বিবেচনা করুন (গিটল্যাব: https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html এর মতো ):

import os
from setuptools import setup

TOKEN_VALUE = os.getenv('EXPORTED_VAR_WITH_TOKEN')

setup(
    ....

    install_requires=[
            ...,
            f"SomePrivateLib @ git+https://gitlab-ci-token:{TOKEN_VALUE}@gitlab.server.com/abc/SomePrivateLib.git@0.1.0#egg=SomePrivateLib"
    ],
    dependency_links = [
            f"git+https://gitlab-ci-token:{TOKEN_VALUE}@gitlab.server.com/abc/SomePrivateLib.git@0.1.0#egg=SomePrivateLib"
    ]
)

0

গিটল্যাবে এই 3 টি অপশন নিয়ে আমি সফল হয়েছিলাম। আমি গিটল্যাবের 11 সংস্করণ ব্যবহার করছি।

বিকল্প 1 - কোনও টোকেন নির্দিষ্ট করা হয়নি। শেলটি ব্যবহারকারীর নাম / পাসওয়ার্ডের জন্য অনুরোধ জানাবে।

from setuptools import setup

TOKEN_VALUE = os.getenv('EXPORTED_VAR_WITH_TOKEN')

setup(
    install_requires=[
        "SomePrivateLib @ git+https://gitlab.server.com/abc/SomePrivateLib.git@0.1.0#egg=SomePrivateLib"
    ]
)

বিকল্প 2 - ব্যবহারকারী অ্যাক্সেস টোকেন নির্দিষ্ট। গিটল্যাব> অ্যাকাউন্টের ডানদিকে> সেটিংস> অ্যাক্সেস টোকনে গিয়ে টোকেন উত্পন্ন। read_repository অধিকারের সাথে টোকেন তৈরি করুন।

উদাহরণ:

import os
from setuptools import setup

TOKEN_VALUE = os.getenv('EXPORTED_VAR_WITH_TOKEN')

setup(
    install_requires=[
        f"SomePrivateLib @ git+https://gitlab-ci-token:{TOKEN_VALUE}@gitlab.server.com/abc/SomePrivateLib.git@0.1.0#egg=SomePrivateLib"
    ]
)

বিকল্প 3 - সংগ্রহস্থল-স্তরের টোকেন নির্দিষ্ট। টোকেন ডিপ্লয়ে করে সংগ্রহস্থল> সেটিংস> সংগ্রহস্থল> এ গিয়ে টোকেন উত্পন্ন। এখান থেকে read_repository অধিকারের সাথে একটি টোকেন তৈরি করুন।

উদাহরণ:

import os
from setuptools import setup

TOKEN_USER = os.getenv('EXPORTED_TOKEN_USER')
TOKEN_VALUE = os.getenv('EXPORTED_VAR_WITH_TOKEN')

setup(
    install_requires=[
        f"SomePrivateLib @ git+https://{TOKEN_USER}:{TOKEN_VALUE}@gitlab.server.com/abc/SomePrivateLib.git@0.1.0#egg=SomePrivateLib"
    ]
)

3 টির মধ্যেই আমি সহজভাবে করতে সক্ষম হয়েছি: "সাম্প্রাইভেটলিব @ গিট + https: //gitlab.server.com/abc/SomePrivateLib.git" শেষে # ইগ চিহ্ন না করে।

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