سؤال

يمكن لأي شخص يرجى توضيح ما هو setup.py وكيف يمكن تكوين أو استخدامها ؟

هل كانت مفيدة؟

المحلول

setup.py يعد ملف Python، الذي يخبرك عادة أن الوحدة / الحزمة التي أنت على وشك تثبيتها وتوزيعها مع Distutils، وهي المعيار لتوزيع وحدات Python.

هذا يتيح لك تثبيت حزم بيثون بسهولة. في كثير من الأحيان يكفي أن يكتب:

$ pip install . 

pip سوف تستخدم Setup.py لتثبيت الوحدة النمطية الخاصة بك. تجنب الدعوة setup.py مباشرة.

https://docs.python.org/3/Installing/index.html#installing-index.

نصائح أخرى

يساعد على تثبيت حزمة بيثون foo على جهازك (يمكن أن يكون أيضا في virtualenv) بحيث يمكنك استيراد الحزمة foo من المشاريع الأخرى وأيضا من [i] يطالب بيثون.

يفعل الوظيفة المماثلة pip, easy_install إلخ.،


استخدام setup.py

لنبدأ ببعض التعريفات:

طَرد - مجلد / دليل يحتوي على __init__.py ملف.
وحدة - ملف بيثون صالح مع .py تمديد.
توزيع - كيف واحد صفقة تتعلق بالآخر حزم و وحدات.

دعنا نقول أنك تريد تثبيت حزمة اسمه foo. وبعد ثم تفعل،

$ git clone https://github.com/user/foo  
$ cd foo
$ python setup.py install

بدلا من ذلك، إذا كنت لا ترغب في تثبيته بالفعل ولكن لا يزال يرغب في استخدامه. ثم تفعل،

$ python setup.py develop  

سيؤدي هذا الأمر إلى إنشاء Symlinks إلى الدليل المصدر داخل حزم الموقع بدلا من نسخ الأشياء. لهذا السبب، فهي سريعة جدا (خاصة بالنسبة للحزم الكبيرة).


خلق setup.py

إذا كان لديك شجرة الحزمة الخاصة بك مثل،

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
└── setup.py

ثم، يمكنك القيام بما يلي في setup.py البرنامج النصي بحيث يمكن تثبيته على بعض الآلة:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.com',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
)

بدلا من ذلك، إذا كانت شجرة الحزمة الخاصة بك أكثر تعقيدا مثل واحد أدناه:

foo
├── foo
│   ├── data_struct.py
│   ├── __init__.py
│   └── internals.py
├── README
├── requirements.txt
├── scripts
│   ├── cool
│   └── skype
└── setup.py

ثم الخاص بك setup.py في هذه الحالة سيكون مثل:

from setuptools import setup

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   author='Man Foo',
   author_email='foomail@foo.com',
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

إضافة المزيد من الأشياء إلى (setup.py) وجعلها لائق:

from setuptools import setup

with open("README", 'r') as f:
    long_description = f.read()

setup(
   name='foo',
   version='1.0',
   description='A useful module',
   license="MIT",
   long_description=long_description,
   author='Man Foo',
   author_email='foomail@foo.com',
   url="http://www.foopackage.com/",
   packages=['foo'],  #same as name
   install_requires=['bar', 'greek'], #external packages as dependencies
   scripts=[
            'scripts/cool',
            'scripts/skype',
           ]
)

ال long_description يستخدم في pypi.org. كما وصف التمهيدي الحزمة الخاصة بك.


وأخيرا، أنت الآن جاهز لتحميل الحزمة الخاصة بك pypi.org. بحيث يمكن للآخرين تثبيت الحزمة الخاصة بك باستخدام pip install yourpackage.

الخطوة الأولى هي المطالبة اسم الحزمة والمساحة الخاصة بك في Pypi باستخدام:

$ python setup.py register

بمجرد تسجيل اسم الحزمة الخاص بك، لا يمكن لأحد أن يدعي أو استخدامه. بعد التسجيل الناجح، يجب عليك تحميل الحزمة الخاصة بك هناك (إلى السحابة)

$ python setup.py upload

اختياريا، يمكنك أيضا تسجيل الحزمة الخاصة بك مع GPG بواسطة،

$ python setup.py --sign upload

علاوة: انظر عينة setup.py من مشروع حقيقي هنا: torchvision-setup.py

setup.py هو إجابة بيثون على مثبت متعدد المنصات و make ملف.

إذا كنت على دراية بتركيبات سطر الأوامر، إذن make && make install يترجم إلى python setup.py build && python setup.py install.

بعض الحزم هي بيثون نقي، وهي فقط بايت جمعت. قد يحتوي البعض الآخر على رمز أصلية، مما يتطلب مترجم أصلي (مثل gcc أو cl) وحدة تتفاعل بيثون (مثل swig أو pyrex).

إذا قمت بتنزيل الحزمة التي تحتوي على "setup.py" في مجلد الجذر، يمكنك تثبيته عن طريق تشغيل

python setup.py install

إذا كنت تقوم بتطوير مشروع وتساءل ما هو هذا الملف مفيد، تحقق وثائق Python على كتابة البرنامج النصي الإعداد

setup.py هو برنامج نصي ثعبان يتم شحنه عادة مع المكتبات أو البرامج المكتوبة بهذه اللغة. إنه الغرض هو التثبيت الصحيح للبرنامج.

العديد من الحزم استخدام distutils الإطار بالزواج setup.py.

http://docs.python.org/distutils/

يمكن استخدام Setup.py في سيناريوهين، أولا، تريد تثبيت حزمة بيثون. ثانيا، تريد إنشاء حزمة بيثون الخاصة بك. عادة ما تحتوي حزمة بيثون القياسية على ملفات مهمة مثل setup.py، setup.cfg و masest.in. عندما تقوم بإنشاء حزمة بيثون، ستحدد هذه الملفات الثلاثة (المحتوى في PKG-INFO في إطار مجلد Egg-Info)، الإصدار، الوصف، التثبيتات الأخرى المطلوبة (عادة في ملف .txt) وعدد قليل من المعلمات الأخرى. تتم قراءة Setup.cfg بواسطة Setup.py أثناء إنشاء الحزمة (يمكن أن تكون tar.gz). mancest.in هو المكان الذي يمكنك فيه تحديد ما يجب إدراجه في الحزمة الخاصة بك. على أي حال يمكنك القيام بمجموعة من الأشياء باستخدام setup.py مثل

python setup.py build
python setup.py install
python setup.py sdist <distname> upload [-r urltorepo]  (to upload package to pypi or local repo)

هناك مجموعة من الأوامر الأخرى التي يمكن استخدامها مع Setup.py. للمساعدة

python setup.py --help-commands

عند تنزيل حزمة مع setup.py افتح جهازك (Mac أو Linux) أو موجه الأوامر (Windows). استخدام cd ومساعدتك في زر علامة التبويب قم بتعيين المسار الصحيح إلى المجلد حيث قمت بتنزيل الملف وأين يوجد setup.py :

iMac:~ user $ cd path/pakagefolderwithsetupfile/

اضغط ENTER، يجب أن ترى شيئا مثل هذا:

iMac:pakagefolderwithsetupfile user$

ثم اكتب بعد هذا python setup.py install :

iMac:pakagefolderwithsetupfile user$ python setup.py install

يضعط enter. وبعد منتهي!

لتثبيت حزمة Python التي قمت بتنزيلها، يمكنك استخراج الأرشيف وتشغيل البرنامج النصي Setup.py Inside:

python setup.py install

بالنسبة لي، هذا شعرت دائما غريبا. سيكون من الطبيعي أن يشير إلى مدير حزمة في التنزيل، حيث سيفعل المرء في Ruby و Nodejs، على سبيل المثال. gem install rails-4.1.1.gem

مدير الحزم هو أكثر راحة أيضا، لأنه مألوف وموثوق به. من ناحية أخرى، كل setup.py هي الرواية، لأنه محدد للحزمة. يطالب الإيمان بالاتفاقية "أنا أثق في هذا الإعداد. يأخذ هذه الأوامر نفسها كما استخدمت في الماضي". هذه ضريبة مؤسفة على قوة الإرادة العقلية.

أنا لا أقول أن سير العمل Setup.py أقل أمانا من مدير الحزمة (أفهم أن PIP يدير فقط الإعدادات. هناك وئام لأوامر جميع كونها إلى نفس تطبيق مدير الحزمة. قد تنمو بلون ذلك.

setup.py هو الثعبان الملف مثل أي دولة أخرى.يمكن أن يستغرق أي اسم إلا بموجب الاتفاقية فإنه يدعى setup.py بحيث لم يكن هناك إجراء مختلف مع كل سيناريو.

في معظم الأحيان setup.py يستخدم في تثبيت بيثون وحدة ولكن الخادم أغراض أخرى:

وحدات:

ولعل هذا هو الأكثر شهرة الاستخدام setup.py في وحدات.على الرغم من أنها يمكن تثبيتها باستخدام pip, القديمة إصدارات بيثون لا تشمل pip بشكل افتراضي وأنها تحتاج إلى أن تكون مثبتة بشكل منفصل.

إذا أردت تثبيت وحدة ولكن لا تحتاج إلى تثبيت pip, فقط عن البديل الوحيد هو تثبيت وحدة من setup.py الملف.ويمكن تحقيق ذلك عن طريق python setup.py install.وهذا من شأنه تثبيت بيثون وحدة الجذر القاموس (دون pip, easy_install إلخ).

وغالبا ما تستخدم هذه الطريقة عندما pip سوف تفشل.على سبيل المثال إذا كان الصحيح الثعبان نسخة من الحزمة المطلوبة غير متوفرة عبر pipربما لأنه لم يعد قائما،, تحميل مصدر تشغيل python setup.py install من شأنها أن تؤدي نفس الشيء, ما عدا في حالة تجميع الثنائيات هي المطلوبة ، (ولكن تجاهل Python version-ما لم يتم إرجاع خطأ).

استخدام آخر setup.py لتثبيت حزمة من المصدر.إذا وحدة لا يزال قيد التطوير العجلة لن تتوفر الملفات و الطريقة الوحيدة لتثبيت هو تثبيت من المصدر مباشرة.

بناء الثعبان ملحقات:

عندما وحدة تم بناؤها ويمكن تحويلها إلى وحدة جاهزة للتوزيع باستخدام distutils إعداد سيناريو.مرة واحدة بنيت هذه يمكن تركيبها باستخدام الأمر أعلاه.

إعداد السيناريو هو من السهل بناء وبمجرد أن الملف قد تم تكوينه بشكل صحيح و يمكن جمعها عن طريق تشغيل python setup.py build (انظر الرابط لجميع الأوامر).

مرة أخرى هذا هو اسمه setup.py لسهولة الاستخدام و حسب الاتفاقية ، ولكن يمكن اتخاذ أي اسم.

Cython:

آخر مشهور استخدام setup.py الملفات تشمل تجميع ملحقات.هذه تتطلب الإعداد النصي مع تعريف المستخدم القيم.أنها تسمح بسرعة (ولكن مرة واحدة جمعت هي منصة تعتمد) التنفيذ.هنا مثال بسيط من الوثائق:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world app',
    ext_modules = cythonize("hello.pyx"),
)

هذا يمكن جمعها عن طريق python setup.py build

Cx_Freeze:

آخر وحدة تتطلب إعداد السيناريو cx_Freeze.وهذا يحول بيثون السيناريو التنفيذية.وهذا يسمح العديد من الأوامر مثل الأوصاف والأسماء والرموز حزم وتشمل استبعاد إلخ وبمجرد تشغيل سوف تنتج تطبيق للتوزيع.مثال من الوثائق:

import sys
from cx_Freeze import setup, Executable
build_exe_options = {"packages": ["os"], "excludes": ["tkinter"]} 

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(  name = "guifoo",
        version = "0.1",
        description = "My GUI application!",
        options = {"build_exe": build_exe_options},
        executables = [Executable("guifoo.py", base=base)])

هذا يمكن جمعها عن طريق python setup.py build.

فما هو setup.py الملف ؟

بكل بساطة هذا هو السيناريو الذي يبني أو تكوين شيء ما في البيئة الثعبان.

حزمة عندما وزعت يجب أن تحتوي على واحد فقط إعداد السيناريو ولكن ليس من غير المألوف أن الجمع بين عدة معا في واحدة الإعداد النصي.لاحظ هذا غالبا ما ينطوي على distutils ولكن ليس دائما (كما أوضحت في المثال الأخير).الشيء المهم أن نتذكر أنها مجرد تكوين حزمة بايثون/script في بعض الطريق.

فإنه يأخذ اسم حتى نفس الأمر يمكن أن تستخدم دائما عند بناء أو تركيب.

لجعلها بسيطة، يتم تشغيل Setup.py "__main__" عندما تسمون تثبيت وظائف الإجابات الأخرى المذكورة. داخل Setup.py، يجب عليك وضع كل ما يلزم تثبيت الحزمة الخاصة بك.

وظائف Setup.py المشتركة

ناقش المقصنتين التاليان شيئين العديد من الوحدات النمطية.

setuptools.setup.

هذه الوظيفة تسمح لك بتحديد سمات المشروع مثل اسم المشروع، الإصدار .... الأهم من ذلك، تتيح لك هذه الوظيفة تثبيت وظائف أخرى إذا تم تعبئتها بشكل صحيح. يرى صفحة الويب هذه مثال على setuptools.setup

هذه الصفات من Setuptools.Setup تمكين تثبيت هذه الأنواع من الحزم:

  • الحزم التي يتم استيرادها إلى مشروعك ومدرجة pypi استخدام setuptools.findpackages.:

    packages=find_packages(exclude=["docs","tests", ".gitignore", "README.rst","DESCRIPTION.rst"])

  • الحزم ليس في pypi, ، ولكن يمكن تنزيلها من عنوان URL باستخدام dependency_links.

    dependency_links=["http://peak.telecommunity.com/snapshots/",]

وظائف مخصصة

في عالم مثالي، setuptools.setup سوف تعامل كل شيء بالنسبة لك. لسوء الحظ، هذا ليس هو الحال دائما. في بعض الأحيان عليك القيام بأشياء محددة، مثل تثبيت التبعيات مع subprocess. أمر، للحصول على النظام الذي تقوم بتثبيته في الحالة المناسبة لحزمةك. حاول تجنب ذلك، تحصل هذه الوظائف على مربكة وغالبا ما تختلف بين نظام التشغيل وحتى توزيع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top