স্পিঙ্কস অটোডোক যথেষ্ট স্বয়ংক্রিয় নয় not


149

আমি পাইথনে একটি 5,000+ লাইন প্রকল্প নথিভুক্ত করতে স্পিনিক্স ব্যবহার করার চেষ্টা করছি। এটি প্রায় 7 বেস মডিউল আছে। আমি যতদূর জানি, অটোডোক ব্যবহার করার জন্য আমার প্রকল্পের প্রতিটি ফাইলের জন্য এই জাতীয় কোড লিখতে হবে:

.. automodule:: mods.set.tests
    :members:
    :show-inheritance:

এটি অনেক ক্লান্তিকর কারণ আমার অনেকগুলি ফাইল রয়েছে। এটি খুব সহজ হবে যদি আমি কেবল উল্লেখ করতে পারি যে আমি 'মোডস' প্যাকেজটি নথিভুক্ত করতে চেয়েছি। স্ফিংস এরপরে পুনরাবৃত্তভাবে প্যাকেজটি পেরিয়ে প্রতিটি উপ-মডেলের জন্য একটি পৃষ্ঠা তৈরি করতে পারে।

এর মতো বৈশিষ্ট্য আছে কি? না হলে আমি সমস্ত .rst ফাইল তৈরি করতে একটি স্ক্রিপ্ট লিখতে পারতাম, তবে এতে অনেক সময় লাগবে।


একটি ছোট স্ক্রিপ্ট লেখার ক্ষেত্রে কী দোষ আছে যা "ওএসওয়াক" ব্যবহার করে এবং এগুলি সমস্ত লিখেছে? বিটিডাব্লু, আমি একটি 40,000+ লাইনের প্রকল্প পেয়েছি এবং আপনি কী বলছেন তা সম্পর্কে অস্পষ্ট। কতগুলি ফাইল জড়িত? lsকোনও ফাইলের রুট করা এবং এটি সম্পাদনা করা কতটা কঠিন হতে পারে ?
এস.লট

125
কেউ বলেনি এটা শক্ত ছিল। ওপি বলেছিলেন, এটি ক্লান্তিকর , যা তা। অন্যান্য ডক সিস্টেমগুলি এটি করতে পারে তা দেওয়া, এটি অযৌক্তিক নয়।
গ্রেগ লিন্ড

শুধু pdoc ব্যবহার করুন
কে 3 --- আরএনসি

উত্তর:


143

আমি তৈরি করা এই স্ক্রিপ্টটি চেক করতে পারি। আমি মনে করি এটি আপনাকে সাহায্য করতে পারে।

এই স্ক্রিপ্টটি পাইথন মডিউল এবং প্যাকেজগুলির সন্ধানকারী একটি ডিরেক্টরি ট্রিকে পার্স করে এবং স্পিনক্সের সাথে কোড ডকুমেন্টেশন তৈরি করতে যথাযথভাবে আরএসটি ফাইল তৈরি করে। এটি একটি মডিউল সূচক তৈরি করে।

হালনাগাদ

এই লিপিটি এখন এপিডোক হিসাবে স্পিনক্স ১.১ এর অংশ ।


আপনি কোথায় ফাইল আউটপুট করার কথা? আমি এগুলিকে স্ফিংক্সের ডিফল্ট _ বিল্ড ফোল্ডারে আউটপুট দেওয়ার চেষ্টা করেছি, তবে দৌড়াদৌড়ি sphinx-build -b html . ./_buildতাদের পছন্দ করে না।
সেরিন

আপনার এগুলি source directory(। আপনার ক্ষেত্রে) রাখা উচিত। _ বিল্ড ডিরেক্টরিটি যেখানে HTML ফাইল তৈরি করা হবে। আরও তথ্যের জন্য পরীক্ষা করুন: sphinx.pocoo.org/tutorial.html#running-t- বিল্ড
এটিয়েন

1
@ এরিয়েন: দুর্দান্ত স্ক্রিপ্ট! আমি কি খুঁজছিলাম ইচ্ছে করে এটি পৃথক ক্লাসের শিরোনাম তৈরি করেছে (নিয়মিত স্পিংক্স চেহারা ক্লাসগুলিতে ভাল
লাগে না they

1
এমনকি স্ফিংকস-এপিডোকটিও বেশ প্রাথমিক। এক বা দুটি মডিউলযুক্ত প্যাকেজের জন্য, এটি ঠিক আছে, তবে আমরা মডিউলগুলি গভীরভাবে বাসা বেঁধে পেয়েছি, এবং স্ফিংস-এপিডোক কিছু সুন্দর নিয়ন্ত্রণহীন আউটপুট তৈরি করে।
অস্পষ্টতা

4
স্ব-উত্তর: .. include:: modules.rstআপনারindex.rst
সিওরো সান্তিলি যুক্ত করুন :27 冠状 病 六四 事件 r

40

autosummaryমূল প্রশ্ন জিজ্ঞাসা করার সময় স্পিনিক্সের এক্সটেনশন ছিল কিনা তা আমি জানি না , তবে আপাতত sphinx-apidocএই জাতীয় স্ক্রিপ্টটি ব্যবহার না করে বা অনুরূপ স্ক্রিপ্ট ছাড়াই স্বয়ংক্রিয় প্রজন্ম স্থাপন করা বেশ সম্ভব । নীচে সেটিংস রয়েছে যা আমার এক প্রকল্পের জন্য কাজ করে।

  1. ফাইলটিতে autosummaryএক্সটেনশন (পাশাপাশি autodoc) সক্ষম conf.pyকরুন এবং এর autosummary_generateবিকল্পটি এতে সেট করুন True। আপনি যদি কাস্টম *.rstটেম্পলেট ব্যবহার না করেন তবে এটি যথেষ্ট হতে পারে । অন্যথায় তালিকাটি বাদ দিতে আপনার টেম্পলেট ডিরেক্টরি যুক্ত করুন, বা autosummaryতাদের ইনপুট ফাইল হিসাবে বিবেচনা করার চেষ্টা করবেন (যা কোনও বাগ বলে মনে হচ্ছে)।

    extensions = ['sphinx.ext.autodoc', 'sphinx.ext.autosummary']
    autosummary_generate = True
    templates_path = [ '_templates' ]
    exclude_patterns = ['_build', '_templates']
    
  2. autosummary::আপনার index.rstফাইলটিতে টিওসি ট্রি ব্যবহার করুন। এই উদাহরণে মডিউলগুলির জন্য ডকুমেন্টেশন project.module1এবং project.module2স্বয়ংক্রিয়ভাবে উত্পন্ন হবে এবং _autosummaryডিরেক্টরিতে স্থাপন করা হবে ।

    PROJECT
    =======
    
    .. toctree::
    
    .. autosummary::
       :toctree: _autosummary
    
       project.module1
       project.module2
    
  3. ডিফল্টরূপে autosummaryমডিউল এবং তাদের ফাংশনগুলির জন্য খুব সংক্ষিপ্ত সংক্ষিপ্তসার তৈরি করে। এটি পরিবর্তন করতে আপনি একটি কাস্টম টেম্পলেট ফাইলটি এতে রাখতে পারেন _templates/autosummary/module.rst(যা জিনজা 2 দিয়ে পার্স করা হবে ):

    {{ fullname }}
    {{ underline }}
    
    .. automodule:: {{ fullname }}
        :members:
    

উপসংহারে, _autosummaryডিরেক্টরিটি সংস্করণ নিয়ন্ত্রণে রাখার দরকার নেই । এছাড়াও, আপনি নিজের ইচ্ছামত যে কোনও নাম রাখতে পারেন এবং এটি উত্স গাছের যে কোনও জায়গায় রাখতে পারেন ( _buildযদিও এটি নীচে স্থাপন করা কার্যকর হবে না)।


4
এটি একটি বিশাল সাহায্য ছিল। পয়েন্ট ২-এ, যেখানে আপনার কাছে "প্রকল্প.মডিউল 1" এবং "প্রজেক্ট.মডিউল 2" রয়েছে, কোনও প্রদত্ত প্যাকেজের প্রতিটি মডিউলের জন্য সেই তালিকাটি স্বয়ংক্রিয়ভাবে তৈরি করার কোনও উপায় আছে? কেবল "প্রকল্প" রাখতে এবং এটি "মডিউল 1" এবং "মডিউল 2" কে স্নিগ্ধ করতে চান?
ব্রাউন

খুব অবাক হয়েছি আমি এর উত্তর কোথাও খুঁজে পাচ্ছি না, আপনি কি কখনও এটি ব্যবহার করেন @ ব্রাউন?
এলিসডায়ার রবার্টসন

3
অ্যালিসডায়ার রবার্টসন না, তবে সরবরাহ করা স্বতঃসৌধিক সমাধান আমার প্রয়োজনের জন্য পর্যাপ্ত পরিমাণের চেয়ে বেশি হয়ে গেছে। কেবলমাত্র আমি যা করতে ভেবেছিলাম তা হ'ল সূচি.আরস্ট ফাইলটি উত্পন্ন করার জন্য একটি স্ক্রিপ্ট লিখতে এবং মডিউলের নামগুলি স্বয়ংক্রিয়ভাবে সন্ধান করা। যাইহোক, অনুশীলনে, মডিউলগুলির তালিকাটি প্রায়শই পরিবর্তন হয় না, তাই কেবল একবারে একবারে একটি ফাইল সম্পাদনা করা অযৌক্তিক নয়। আমি নিশ্চিত যে আমি ইতিমধ্যে সমাধানের সন্ধান করতে এর চেয়ে অনেক বেশি সময় ব্যয় করেছি যে এটি কেবলমাত্র একটি ফাইল সম্পাদনা করতে লাগে!
ব্রাউন

12

প্রতিটি প্যাকেজে, __init__.pyফাইলটির প্যাকেজের .. automodule:: package.moduleপ্রতিটি অংশের জন্য উপাদান থাকতে পারে ।

তারপরে আপনি .. automodule:: packageএটি করতে পারেন এবং এটি বেশিরভাগই যা চান তা করেন।


আমি শুধু এ ট্রিপল উদ্ধৃতির মধ্যে যে স্ট্রিং করা না Init .py?
Cory Walker

5
@ কোরি ওয়াকার: এটি "এ" স্ট্রিং নয়। আপনি - এবং হওয়া উচিত - প্রতিটি একক ফাইলে ট্রিপল-কোটেড ডকাস্ট্রিংগুলি রাখছেন। সবাই. এটিতে __init__.pyআপনার প্যাকেজগুলির ফাইল অন্তর্ভুক্ত রয়েছে । .. automodule::প্যাকেজের মধ্যে মডিউলগুলি সহ ডক্টরিংয়ের মধ্যে কোনও স্পিনক্স ডকুমেন্টেশন নির্দেশিকা অন্তর্ভুক্ত থাকতে পারে ।
এস লট

2
autodocএটি একটি টাইপো, এটি হওয়া উচিত automodule। তবে ইঙ্গিতটির জন্য অনেক ধন্যবাদ!
মারিওটোমো

9

স্পিংস সংস্করণ 3.1 (জুন 2020) থেকে, sphinx.ext.autosummary(শেষ পর্যন্ত) পুনরাবৃত্তি হয়েছে।

সুতরাং আর কোনও স্বয়ংক্রিয় প্যাকেজ সনাক্তকরণের জন্য স্পিঙ্ক অটোএপিআই বা স্পিঙ্কস অটপ্যাকেজস্মুলির মতো তৃতীয় পক্ষের লাইব্রেরিগুলিতে হার্ড কোড মডিউল নামগুলির দরকার নেই বা তৃতীয় পক্ষের লাইব্রেরিগুলির উপর নির্ভর করার প্রয়োজন নেই ।

দস্তাবেজ করার জন্য পাইথন ৩.7 প্যাকেজটির উদাহরণ ( গিথুবের কোড দেখুন এবং রিডডকসগুলিতে ফলাফল দেখুন ):

mytoolbox
|-- mypackage
|   |-- __init__.py
|   |-- foo.py
|   |-- mysubpackage
|       |-- __init__.py
|       |-- bar.py
|-- doc
|   |-- source
|       |--index.rst
|       |--conf.py
|       |-- _templates
|           |-- custom-module-template.rst
|           |-- custom-class-template.rst

conf.py:

import os
import sys
sys.path.insert(0, os.path.abspath('../..'))  # Source code dir relative to this file

extensions = [
    'sphinx.ext.autodoc',  # Core library for html generation from docstrings
    'sphinx.ext.autosummary',  # Create neat summary tables
]
autosummary_generate = True  # Turn on sphinx.ext.autosummary

# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']

index.rst(নতুন :recursive:বিকল্প নোট করুন ):

Welcome to My Toolbox
=====================

Some words.

.. autosummary::
   :toctree: _autosummary
   :template: custom-module-template.rst
   :recursive:

   mypackage

এটি প্যাকেজের প্রতিটি মডিউল স্বয়ংক্রিয়ভাবে সংক্ষিপ্ত করতে যথেষ্ট, যদিও গভীরভাবে বাসাযুক্ত। প্রতিটি মডিউলের জন্য, এটি সেই মডিউলটিতে প্রতিটি বৈশিষ্ট্য, ফাংশন, শ্রেণি এবং ব্যতিক্রম সংক্ষিপ্তসার করে।

অদ্ভুতভাবে, যদিও, ডিফল্ট sphinx.ext.autosummaryটেম্পলেটগুলি প্রতিটি অ্যাট্রিবিউট, ফাংশন, শ্রেণি এবং ব্যতিক্রমগুলির জন্য পৃথক ডকুমেন্টেশন পৃষ্ঠাগুলি তৈরি করে না এবং সংক্ষিপ্ত টেবিলগুলি থেকে তাদের সাথে লিঙ্ক করে। এটি করার জন্য টেমপ্লেটগুলি প্রসারিত করা সম্ভব, নীচে দেখানো হয়েছে, তবে কেন আমি এটি ডিফল্ট আচরণ নয় তা বুঝতে পারি না - অবশ্যই এটি বেশিরভাগ মানুষই চান ..? আমি এটি একটি বৈশিষ্ট্য অনুরোধ হিসাবে উত্থাপিত করেছি

আমাকে স্থানীয়ভাবে ডিফল্ট টেম্পলেটগুলি অনুলিপি করতে হয়েছিল, এবং তারপরে সেগুলিতে যুক্ত করতে হবে:

  • অনুলিপি site-packages/sphinx/ext/autosummary/templates/autosummary/module.rstকরুনmytoolbox/doc/source/_templates/custom-module-template.rst
  • অনুলিপি site-packages/sphinx/ext/autosummary/templates/autosummary/class.rstকরুনmytoolbox/doc/source/_templates/custom-class-template.rst

বিকল্পটি ব্যবহার করে হুকটি উপরের দিকে custom-module-template.rstরয়েছে । (ডিফল্ট সাইট-প্যাকেজ টেম্পলেট ব্যবহার করে কী হয় তা দেখতে সেই লাইনটি মুছুন))index.rst:template:

custom-module-template.rst (ডানদিকে উল্লিখিত অতিরিক্ত লাইন):

{{ fullname | escape | underline}}

.. automodule:: {{ fullname }}
  
   {% block attributes %}
   {% if attributes %}
   .. rubric:: Module Attributes

   .. autosummary::
      :toctree:                                          <-- add this line
   {% for item in attributes %}
      {{ item }}
   {%- endfor %}
   {% endif %}
   {% endblock %}

   {% block functions %}
   {% if functions %}
   .. rubric:: {{ _('Functions') }}

   .. autosummary::
      :toctree:                                          <-- add this line
   {% for item in functions %}
      {{ item }}
   {%- endfor %}
   {% endif %}
   {% endblock %}

   {% block classes %}
   {% if classes %}
   .. rubric:: {{ _('Classes') }}

   .. autosummary::
      :toctree:                                          <-- add this line
      :template: custom-class-template.rst               <-- add this line
   {% for item in classes %}
      {{ item }}
   {%- endfor %}
   {% endif %}
   {% endblock %}

   {% block exceptions %}
   {% if exceptions %}
   .. rubric:: {{ _('Exceptions') }}

   .. autosummary::
      :toctree:                                          <-- add this line
   {% for item in exceptions %}
      {{ item }}
   {%- endfor %}
   {% endif %}
   {% endblock %}

{% block modules %}
{% if modules %}
.. rubric:: Modules

.. autosummary::
   :toctree:
   :template: custom-module-template.rst                 <-- add this line
   :recursive:
{% for item in modules %}
   {{ item }}
{%- endfor %}
{% endif %}
{% endblock %}

custom-class-template.rst (ডানদিকে উল্লিখিত অতিরিক্ত লাইন):

{{ fullname | escape | underline}}

.. currentmodule:: {{ module }}

.. autoclass:: {{ objname }}
   :members:                                    <-- add at least this line
   :show-inheritance:                           <-- plus I want to show inheritance...
   :inherited-members:                          <-- ...and inherited members too

   {% block methods %}
   .. automethod:: __init__

   {% if methods %}
   .. rubric:: {{ _('Methods') }}

   .. autosummary::
   {% for item in methods %}
      ~{{ name }}.{{ item }}
   {%- endfor %}
   {% endif %}
   {% endblock %}

   {% block attributes %}
   {% if attributes %}
   .. rubric:: {{ _('Attributes') }}

   .. autosummary::
   {% for item in attributes %}
      ~{{ name }}.{{ item }}
   {%- endfor %}
   {% endif %}
   {% endblock %}

6

স্পিঙ্কস অটোএপিআই ঠিক এটি করে।


1
ওরে আমার মঙ্গল! এটি অন্য যে কোনও কিছুর চেয়ে অনেক ভাল কাজ করে। মনে রাখবেন যে এটি "অটোডোক" বা "এপিডোক" নয়, এটি সম্পূর্ণ আলাদা এক্সটেনশন।
রোপ্লেডার

2
পূর্বোক্ত। এটি "অটো" র "অটোডোক" এ রাখে .... এখানে আমাদের সমস্ত প্রকল্পটি স্যুইচ করতে হয়েছিল: নীলামকবি · পুল অনুরোধ \ # 7 · gwexplorationaudits / r2b2
nealmcb

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