English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
مقدمة
أمس قمت بتعليم وتحميل مكتبة معالجة ملفات VASP الخاصة بي ووضعها على PyPI، والآن يمكنك تثبيت VASPy مباشرة باستخدام pip وeasy_install (بالإضافة إلى ترحيب جميع من يرغبون في استخدام VASP لقيام بحسابات الكيمياء الحيوية لتعزيز النجوم والانضمام إليهم)،
عنوان GitHub لمكتبة VASPy:https://github.com/PytLab/VASPy
عنوان PyPI لمكتبة VASPy:https://pypi.python.org/pypi/vaspy/
بما أن ذاكرتي ليست جيدة جدًا، أخاف أن أنسى هذا بعد فترة طويلة، لذا سأقوم هنا بتحرير ما أريد بسرعة باستخدام برنامج VASPy الخاص بي كنموذج لأقوم بسرعة بتحليل تجميع وتحميل Python.
هيكل ملف مكتبة VASPy
أولاً، يُكتب هيكل ملف مكتبة VASPy بأكمله، والنصوص التالية يتم شرحها على أساس ذلك المثال:
VASPy/ ├── LICENSE ├── MANIFEST ├── MANIFEST.in ├── README.rst ├── requirements.txt ├── scripts │ ├── change_incar_parameters.py │ ├── create_inputs.py │ └── ... ├── setup.cfg ├── setup.py ├── tests │ ├── incar_test.py │ ├── __init__.py │ ├── oszicar_test.py │ ├── outcar_test.py │ ├── testdata │ │ ├── CONTCAR │ │ ├── DOS_SUM │ │ ├── ELFCAR │ │ └── ... │ └── ... └── vaspy ├── __init__.py ├── iter.py ├── matstudio.py └── ... 4 مجلدات، 54 ملف
أدوات لت打包 وتثبيت الحزم الثالثة
في هذه الحالة نحتاج إلى استخدام أدوات مثل setuptools وpip للبناء والنشر وتثبيت حزمنا الخاصة، إذا كنت بحاجة إلى بناء wheel يجب أيضًا تثبيت مكتبة wheel. إذا كان إصدار python>=2.7.9 أو >=3.4، فإن setuptools وpip تم تثبيتهما بالفعل، قد تحتاج إلى تحديثهما إلى أحدث إصدار
pip install -U pip setuptools
يمكنك استخدام أدوات إدارة الحزم مثل
yum install pip sudo apt-get install pip
تثبيت من خلال سكربت get-pip.py، إذا تم اكتشاف عدم وجود wheel وsetuptools سيتم تثبيتها تلقائيًا أيضًا
python get-pip.py
لن نتحدث بشكل مفصل عن الأدوات المحددة للاستخدام والشرح، يمكنك مراجعة متطلبات التثبيت للحصول على معلومات.
أدوار ملفات المجموعة المختلفة
setup.py
هذا الملف هو أكثر ملفات الت打包 بأهمية، حيث يقدم إثنين من الوظائف الرئيسية:
وظيفة setup()، حيث تحدد هذه الوظيفة كيفية تكوين مشروعك.
أدوات سطر الأوامر، بما في ذلك الت打包، الاختبار، والنشر وما إلى ذلك. يمكنك عرضها باستخدام الأمر التالي;
python setup.py --help-commands
setup.cfg
هذا الملف يحتوي على بعض المعلمات الافتراضية للبناء مثل المعلمات الافتراضية لبناء bdist_wheel --universal
[bdist_wheel] universal=1
بهذا سيتم استخدام --universal بشكل افتراضي في كل مرة نقوم ب打包، والنتيجة مشابهةً لـ:
python setup.py bdist_wheel --universal
README.rst
هذا كان أولاً ما كتبته باستخدام markdown، بعد الت打包 والنشر على PyPI اكتشفت أن PyPI لا يدعم تفعيل markdown، وكانت الصفحة مليئة بالفوضى، لذا استخدمت لغة نصية مدمجة مرة أخرى. بعد كل شيء، يمكن التعرف على لغة العلامات بسرعة، وإذا لم يكن ذلك كذلك، يمكن العثور على نموذج وإتباعه.
يمكنك التحقق من قواعد نحو reStructuredText في الوثائق الرسمية: Quick reStructuredText
في الواقع، هناك طريقة أخرى وهي استخدام pandoc لتحويل markdown إلى تنسيق rst، الطريقة السهلة هي استخدام مكتبة pyandoc لتحويل markdown تلقائيًا عند الإصدار.
يمكنك التحقق من الطريقة الخاصة بها في: Use Markdown README's in Python modules
MANIFEST.in
هذا الملف يخبر setuptools عند الت打包 ما هي الملفات الإضافية التي يجب تضمينها، على سبيل المثال، استخدمت هذا الملف لتضمين ملفات بيانات اختبار وحدات الاختبار الخاصة بVASPy. بالطبع، يمكن تضمين README، LICENSE وما إلى ذلك أيضًا.
إليك محتويات MANIFEST.in الخاصة بي:
include README.rst include requirements.txt include LICENSE recursive-include scripts * recursive-include tests *
يمكنك التحقق من قواعد النحو الخاصة بها في: The MANIFEST.in template
vaspy/
هذا الدليل هو المكان الذي يحتوي على كود مشروع vaspy.
tests/
هذه الدليل أيضًا هي مكتبة فرعية تحتوي على سكربتات الاختبار، تم إضافة __init__.py لجعلها مكتبة لتتمكن من استخدام python setup.py test للقيام باختبار الوحدات.
معلمات setup()
في هذه الصفحة سأقوم بشرح بعض المعلمات التي أستخدمها، يمكنك التحقق من استخدام المعلمات الأخرى في:https://docs.python.org/3/distutils/setupscript.html
name
versions = "vaspy"
هذا هو اسم المشروع بأكمله، سيتم استخدام هذا الاسم ورقم الإصدار بعد الت打包.
version
from vaspy import __version__ version = __version__
description
هذا هو وصف قصير للمشروع، عادة ما يكون جملة واحدة، سيظهر تحت اسم المشروع على PyPI.
long_description
هذا هو وصف طويل، يعادل وصف مختصر للمشروع، إذا كان هذا السلسلة في تنسيق rst، فإن PyPI سيقوم بتحويلها تلقائيًا إلى HTML للعرض. يمكن قراءة محتويات README.rst مباشرة.
url
روابط الباقات، عادة ما تكون روابط على GitHub أو روابط على readthedocs.
packages
قائمة بالباقات التي يجب تضمينها، يقدم setuptools واجهة find_packages() لمساعدتنا في العثور على الباقات في مسار الجذر، هذه الواجهة ليست موجودة في distutil.
setup_requires
هذه المعلمة تعرف الإعتمادات الأخرى المطلوبة لتنصيب و تشغيل VASPy (الأكثر أساسية)، ويتم تثبيت هذه الإعتمادات باستخدام pip.
للإشارة إلى الفرق بين هذه المعلمة وملف requirements.txt، راجع: install_requires vs Requirements files
classifier
هذه المعلمة توفر مجموعة من الفئات، وسيتم وضع المشاريع في مجالات مختلفة على PyPI.
للإشارة إلى أسماء الفئات والقواعد المحددة، راجع:https://pypi.python.org/pypi?%3Aaction=list_classifiers
test_suite
هذه المعلمة تساعدنا في استخدام
python setup.py test
لإجراء اختبارات وحدة، لم يعد عليك كتابة سكريبت جديد مثل run_tests.py لإجراء اختبارات الوحدة.
هذا هو الشرح الرسمي للمعلمة:
A string naming a unittest.TestCase subclass (or a package or module containing one or more of them, or a method of such a subclass), or naming a function that can be called with no arguments and returns a unittest.TestSuite. If the named suite is a module, and the module has an additional_tests() function, it is called and the results are added to the tests to be run. If the named suite is a package, any submodules and subpackages are recursively added to the overall test suite.
بمعنى أن هذا المعامل يمكنه قبول أنواع متعددة من المعاملات:
استقبال فرع unittest.TestCase، يمكننا كتابة جميع الاختبارات الوحدية في اختبار واحد، ثم إعادة تحميلها وإرسالها إلى test_suite.
استقبال كائن الدالة، هذه الدالة ليس لها أي متغيرات مدخلة، وتعيد unittest.TestSuite. لذا يمكننا كتابة دالة واحدة وتجميع عدة حالات اختبار في مجموعة واحدة، ثم إعادة تحميلها وإرسالها إلى test_suite.
أسماء الصفوف والمكتبات، أنا أستخدم هذا الأسلوب، كانت اختباراتي الخاصة منفصلة في سكريpts متعددة، وأنا أضفت __init__.py وأصبحت حزمة، وأرسلت اسم الحزمة إلى test_suite، وأصبحت setuptools تتحول بشكل سحري كل اختبارات الحزمة في هذا الحزمة لتشغيلها في وقت واحد، وبالتالي عند إضافة سكريpt جديد للاختبار في المستقبل، يمكنني فقط إضافة سكريpt جديد، وليس من الضروري تعديل أي شيء آخر.
نتيجة التشغيل:
zjshao@SHAO-PC:/mnt/d/Dropbox/Code/CentOS_code/VASPy$ python setup.py test تشغيل الاختبار تشغيل egg_info إنشاء vaspy.egg-info كتابة vaspy.egg-info/PKG-INFO كتابة الأسماء الأعلى إلى vaspy.egg-info/top_level.txt كتابة dependency_links إلى vaspy.egg-info/dependency_links.txt كتابة ملف المانيفست 'vaspy.egg-info/SOURCES.txt' قراءة ملف المانيفست 'vaspy.egg-info/SOURCES.txt' قراءة قالب المانيفست 'MANIFEST.in' كتابة ملف المانيفست 'vaspy.egg-info/SOURCES.txt' تشغيل build_ext test_compare (tests.incar_test.InCarTest) تأكد من أن يمكننا مقارنة كائنات InCar بشكل صحيح. ... حسنًا test_eq (tests.incar_test.InCarTest) اختبار وظيفة __eq__(). ... ناجح ... يتم تمرير بعض النتائج ------------------------------------------------------------------------- تم إجراء 22 اختبارًا في 3.574 ثانية حسنًا
إطلاق حزمة python الخاصة بك
1. أولاً، قم بإنشاء حساب على PyPI
2. قم بتهيئة ~/.pypirc كما يلي:
[distutils] index-servers = pypi pypitest [pypi] اسم المستخدم:ShaoZhengjiang كلمة المرور:mypassword [pypitest] اسم المستخدم:ShaoZhengjiang كلمة المرور:mypassword
3. ثم سجّل وحمّل حزمة خاصة بك إلى خادم الاختبار
يقدم pypi خادم اختبار، يمكننا القيام بالاختبارات على هذا الخادم الاختبار.
python setup.py register -r pypitest
ثم
python setup.py sdist upload -r pypitest
إذا لم يكن هناك مشكلة، لا يجب أن نحصل على أي أخطاء.
4. تحميل إلى PyPI
إذا كانت الاختبارات الناجحة، يمكننا اتباع نفس الخطوات لتسجيل وتحميل الحزمة.
python setup.py register -r pypi python setup.py sdist upload -r pypi
حسنًا، بعد ذلك يمكننا في PyPI(https://pypi.python.org/pypi/vaspy/في ) نرى حزمنا الخاصة.