كيفية نشر الثعبان التطبيق مع المكتبات المصدر مع عدم وجود مزيد من تبعيات?

StackOverflow https://stackoverflow.com/questions/527510

سؤال

الخلفية:لدي صغير الثعبان التطبيق الذي يجعل الحياة للمطورين إطلاق البرنامج في شركتنا أسهل قليلا.بناء قابل للتنفيذ ويندوز باستخدام py2exe.التطبيق وكذلك ثنائي يتم التحقق إلى التخريب.توزيع يحدث من قبل الناس فقط التحقق من الدليل من SVN.البرنامج يحتوي على حوالي 6 مختلفة بيثون مكتبة تبعيات (مثلا ، ElementTree, ماكو)

الوضع:المطورين تريد أن الإختراق على مصدر هذه الأداة ثم تشغيله دون الحاجة إلى بناء الثنائية.حاليا هذا يعني أنها تحتاج بايثون 2.6 مترجم (وهو أمر جيد) و أيضا 6 المكتبات المثبتة محليا باستخدام easy_install.

المشكلة

  • هذه ليست العام ، الكلاسيكية بيئة مفتوحة المصدر:أنا داخل شبكة الشركة ، أداة لن تترك "الحديقة المسورة" و يجب على محمل الجد غير مريح الحواجز أمام الدخول إلى خارج الإنترنت (NTLM مصادقة وكلاء و/أو الآلات دون الوصول المباشر إلى الإنترنت).
  • أريد العقبات بدء الإختراق على هذه الأداة أن يكون الحد الأدنى:لا يجب على أحد أن البحث عن الحق التبعية في حق الإصدار ، ينبغي أن يكون تنفيذ القليل من الإعداد ممكن.على النحو الأمثل الشروط أن الثعبان التثبيت فقط التحقق من البرنامج من التخريب.

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

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

المحلول

أنا في بعض الأحيان استخدام النهج أصف أدناه ، لنفس السبب @بوريس الدول:أنا أفضل أن استخدام بعض التعليمات البرمجية سهلا كما أ) svn checkout/تحديث - ب) الذهاب.

لكن للعلم:

  • يمكنني استخدام virtualenv/easy_install أكثر من مرة.
  • أنا أوافق إلى حد ما إلى critisisms بواسطة @علي و @S. لوت

على أي حال ، فإن النهج يمكنني استخدام يعتمد على تعديل sys.المسار ومن يعمل مثل هذا:

  • تتطلب الثعبان setuptools (لتمكين كود تحميل من البيض) على كافة أجهزة الكمبيوتر التي سوف تستخدم هذا البرنامج.
  • تنظيم بنية الدليل هذا:
project/
    *.py
    scriptcustomize.py
    file.pth

    thirdparty/
        eggs/
            mako-vNNN.egg
            ... .egg
        code/
            elementtree\
                *.py
            ...
  • في المستوى الأعلى الخاص بك النصي(s) إدراج التعليمات البرمجية التالية في الجزء العلوي:
from scriptcustomize import apply_pth_files
apply_pth_files(__file__)
  • إضافة scriptcustomize.py إلى مجلد المشروع الخاص بك:
import os
from glob import glob
import fileinput
import sys

def apply_pth_files(scriptfilename, at_beginning=False):
    """At the top of your script:
    from scriptcustomize import apply_pth_files
    apply_pth_files(__file__)

    """
    directory = os.path.dirname(scriptfilename)
    files = glob(os.path.join(directory, '*.pth'))
    if not files:
        return
    for line in fileinput.input(files):
        line = line.strip()
        if line and line[0] != '#':
            path = os.path.join(directory, line)
            if at_beginning:
                sys.path.insert(0, path)
            else:
                sys.path.append(path)
  • إضافة واحد أو أكثر *.pth ملف(ق) إلى مجلد المشروع الخاص بك.في كل سطر ، ووضع إشارة إلى دليل مع الحزم.على سبيل المثال:
# contents of *.pth file
thirdparty/code
thirdparty/eggs/mako-vNNN.egg
  • أنا "نوع من" مثل هذا النهج.ما أحب:وهو مشابه كيف *.pth ملفات العمل ، ولكن البرامج الفردية بدلا من كامل موقع-الحزم.ما أنا لا أحب:الحاجة إلى إضافة سطرين في بداية أعلى مستوى البرامج النصية.
  • مرة أخرى:يمكنني استخدام virtualenv أكثر من مرة.ولكن أنا أميل إلى استخدام virtualenv لمشاريع حيث لدي رقابة مشددة من نشر السيناريو.في الحالات التي لا يكون ضيق التحكم, أنا أميل إلى استخدام نهج أصف أعلاه.فإنه يجعل من السهل حقا أن حزمة المشاريع البريدي و المستخدم النهائي "تثبيت" إنه (قبل حيويي).

نصائح أخرى

مجرد استخدام virtualenv - هو عبارة عن أداة لإنشاء معزولة الثعبان البيئات.يمكنك إنشاء إعداد السيناريو وتوزيع مجموعة كاملة إذا كنت تريد.

"أنا أحب حقيقة أن المطورين (أو لي بدأت على تنظيف الجهاز الجديد) يجب أن تقفز من خلال distutils الأطواق من الحاجة إلى تثبيت المكتبات محليا قبل أن يتمكنوا من البدء"

لماذا ؟

ما-على وجه التحديد-هو الخطأ في هذا ؟

يمكنك فعل ذلك لإنشاء المشروع.المشروع هو هكذا شعبية تريد من الآخرين أن تفعل الشيء نفسه.

أنا لا أرى مشكلة.يرجى تحديث سؤالك مع مشاكل محددة تحتاج إلى حل.الكره الطريق مفتوحة المصدر يتم توزيعها ليست مشكلة و هي طريقة مفتوح المصدر يعمل.

تحرير.إن "الحديقة المسورة" لا يهم كثيرا.

الخيار 1.هل يمكن أن للمعلومية بناء "المثبت" الذي يمتد easy_install 6 مرات بالنسبة لهم.

الخيار 2.يمكنك حفظ كل من المثبت مجموعات easy_install قد استخدمت.ثم يمكنك تقديم السيناريو الذي يقوم بفك ، python setup.py install لكل ست.

الخيار 3.يمكنك توفير نسخة مضغوط من site-packages.بعد تثبيت بيثون ، فإنها بفك موقع الويب الخاص بك-حزم الدليل إلى C:\Python2.5\lib\site-packages`.

الخيار 4.يمكنك بناء الخاصة بك MSI طقم الخاص بك الثعبان البيئة.

الخيار 5.يمكنك المضيف الخاص بك pypi مثل الخادم وتوفير easy_install أن يتحقق الملقم الخاص بك أولا.

وأنا أتفق مع إجابات من قبل Nosklo و S. لوت.(+1 على حد سواء)

ويمكنني أن أضيف فقط أن ما تريد القيام به هو في الواقع فكرة رهيبة.

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

ثم هناك قضايا محددة مثل "ما إذا كان أحد يريد المستخدم إلى تثبيت نسخة مختلفة أو تنفيذ مكتبة؟", مثال صارخ على هنا هو ElementTree ، وهذا له عدد من التطبيقات.

أنا لا أقترح أن هذا هو فكرة عظيمة, ولكن عادة ما أقوم به في مثل هذه الحالات هو أن لدي Makefile, دققت في التخريب الذي يحتوي على جعل قواعد لجلب جميع تعتمد المكتبات وتثبيت لهم.Makefile يمكن أن تكون ذكية بما يكفي فقط تطبيق تعتمد المكتبات إذا لم تكن موجودة ، لذلك يمكن أن يكون سريع نسبيا.

مطور جديد على المشروع ببساطة التحقق من التخريب ومن ثم أنواع "جعل".

هذا النهج قد تعمل جيدا بالنسبة لك ، نظرا إلى أن الجمهور يستخدم بالفعل إلى فكرة استخدام التخريب المخارج كجزء من عملية جلب.أيضا ، فقد لطيفة الخاصية أن جميع المعارف حول البرنامج الخاص بك ، بما في ذلك عوامل خارجية ، يتم التقاطها في مستودع شفرة المصدر.

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