sphinx-build başarısız - autodoc modülü içe aktaramıyor / bulamıyor


104

Sphinx'e başlamaya çalışıyorum ve acımasız problemlerim var gibi görünüyor.

Komut: docs/sphinx-quickstart

Tüm soruları cevaplıyorum ve her şey yolunda gidiyor.

Komut: docs/ls

Her şey normal görünüyor. Sonuç:build Makefile source

Komut: sphinx-build -d build/doctrees source build/html

İşe yarıyor gibi görünüyor. İndex.html dosyasını açabildim ve istediğim şeyin "kabuğunu" görebildim.

Asıl kaynak kodumu sourcesorunlarla karşılaştığım klasör olarak koymaya çalıştığımda .

Komut: sphinx-build -d build/doctrees ../ys_utils build/html

Sonuç:

Making output directory...
Running Sphinx v1.1.3
loading pickled environment... not yet created
No builder selected, using default: html
loading intersphinx inventory from http://docs.python.org/objects.inv...
building [html]: targets for 1 source files that are out of date
updating environment: 1 added, 0 changed, 0 removed
Traceback (most recent call last):                                                                                               
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object
    __import__(self.modname)
ImportError: No module named ys_utils
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object
    __import__(self.modname)
ImportError: No module named ys_utils.test_validate_ut
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object
    __import__(self.modname)
ImportError: No module named ys_utils.git_utils
Traceback (most recent call last):
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/ext/autodoc.py", line 321, in import_object
    __import__(self.modname)
ImportError: No module named setup.setup

/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:4: WARNING: autodoc can't import/find module 'ys_utils', it reported error: "No module named ys_utils", please check your spelling and sys.path
/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:10: WARNING: autodoc can't import/find module 'ys_utils.test_validate_ut', it reported error: "No module named ys_utils.test_validate_ut", please check your spelling and sys.path
/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:12: WARNING: don't know which module to import for autodocumenting u'UnitTests' (try placing a "module" or "currentmodule" directive in the document, or giving an explicit module name)
/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:18: WARNING: autodoc can't import/find module 'ys_utils.git_utils', it reported error: "No module named ys_utils.git_utils", please check your spelling and sys.path
/home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:24: WARNING: autodoc can't import/find module 'setup.setup', it reported error: "No module named setup.setup", please check your spelling and sys.path
WARNING: master file /home/ricomoss/workspace/nextgen/ys_utils/index.rst not found
looking for now-outdated files... none found
pickling environment... done
checking consistency... /home/ricomoss/workspace/nextgen/ys_utils/ys_utils.rst:: WARNING: document isn't included in any toctree
done
preparing documents... done
writing output... [ 50%] index                                                                                                   
Exception occurred:
  File "/usr/local/lib/python2.6/dist-packages/Sphinx-1.1.3-py2.6.egg/sphinx/environment.py", line 1213, in get_doctree
    f = open(doctree_filename, 'rb')
IOError: [Errno 2] No such file or directory: '/home/ricomoss/workspace/nextgen/docs/build/doctrees/index.doctree'
The full traceback has been saved in /tmp/sphinx-err-jjJ7gM.log, if you want to report the issue to the developers.
Please also report this if it was a user error, so that a better error message can be provided next time.
Either send bugs to the mailing list at <http://groups.google.com/group/sphinx-dev/>,
or report them in the tracker at <http://bitbucket.org/birkenfeld/sphinx/issues/>. Thanks!

Ben Sphinx'te tamamen acemiyim ve bu tür dokümantasyon konusunda nispeten yeniyim. Herhangi biri öneride bulunabilir mi?

Düzenle:

Bunu halletmek için bir Makefile kullanabilmek istiyorum. Şu an itibariyle projemde iki klasörüm var.

nextgen/ls

docs ys_utils

Sahip olacağım tüm diğer modüller nextgen/docs/Makefileiçin HTML oluşturmam gerekiyor ys_utils.

Yanıtlar:


87

Autodoc modüllerinizi bulamıyor çünkü içinde değiller sys.path.

İçeri da modüllere yolunu eklemek zorunda sys.pathGözlerinde farklı conf.py. Üstüne bakın conf.py(ithalatından hemen sonra sys), sys.path.insert()uyarlayabileceğiniz bir ifade var .

Bu arada Makefile, belgelerinizi oluşturmak için Sphinx tarafından oluşturulanları kullanabilirsiniz . Sadece ara

make

seçenekleri görmek için.

Denemeden önce bir şeyler ters giderse:

make clean

koşmadan önce make html.


59

Herkes os.path.append()için iyi çalışıyor gibi görünüyor , ancak conf.pyşablonu takip ederseniz, modül yolunu sys.pathkullanmanın önüne os.path.insert(0, ...)ve yalnızca fazladan bir.

import os
import sys
sys.path.insert(0, os.path.abspath('..'))

Eğer kurulum varsa sphinxayrı kullanımı projesini buildve sourcedizinleri, o çağrı yerine olmalıdır:

sys.path.insert(0, os.path.abspath('../..'))

32

içinde conf.py

sadece proje klasörünüzün yolunu ekleyin.

sys.path.append('/home/workspace/myproj/myproj')

8
Yol sabit kodlaması, sizin için yapabileceğiniz en iyi şey değildir conf.py.
firegurafiku

18
Eğer böyle bir proje yapınız varsa /app, /docs... kullanmak olabilir sys.path.append(os.path.join(os.path.dirname(__name__), '..'))kullanmak ve daha sonra .. automodule:: appda içinde .rst-Dosya.
fnkr

3

Eğer

  1. modül kök yolu, conf.py'de doğru şekilde ayarlanmış
  2. __init__.py doğru yerleştirildi
  3. ilk sözdizimi doğru

ve otomatik doktorunuz hala modülleri bulamıyor ...

Bunun nedeni, bu modüllerin bağımlılıklarının python ortamınızda karşılanmaması olabilir. Tüm içe aktarma ifadelerinin modüller içinde çalışıp çalışmadığını kontrol etmek isteyeceksiniz.


4
Sfenksin neden bağımlılıklara ihtiyaç duyduğunu anlamıyorum, bunun nedeni docstrings içinde testler yapma olasılığı mı? Bundan kaçınılabilir mi (Herhangi bir pakete ihtiyacım yok, sadece sphinx'in docstring'i html olarak ayrıştırmasını istiyorum).
cglacet

Bu bağımlılıkları içe aktarmak istemiyorsanız conf.py dosyanızda autodoc_mock_imports kullanın: sphinx-doc.org/en/master/usage/extensions/…
filip stepniak

1

Sanırım bunu, toctree'ye bir dosya eklemeye çalıştığımda ilk kez yaptım. Sanırım bunun nedeni: maxdepth satırı ve dosya adı arasındaki boş satırı atlamış olmamdı.

.. Animatrix Concepts documentation master file, created by
   sphinx-quickstart on Thu Mar 22 18:06:15 2012.
   You can adapt this file completely to your liking, but it should at least
   contain the root `toctree` directive.

Welcome to Animatrix Concepts documentation!
============================================

Contents:

.. toctree::
   :maxdepth: 2

   stuff


Indices and tables
==================

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`

Yukarıdaki index.rst dosyam var. stuff.rst, onunla aynı dizinde bulunur.


2
Bu nereye gider? Ben index.rstde /docs/sourceve /ys_utils. Bunun docssürümde olması gerektiğini tahmin ediyorum ? Ben sadece index.rstile oluşturulan varsayılan dosyayı kullanıyorum sphinx-quickstart.
Rico

-1 traceback'ten itibaren modüllerin içinde olmadığı açık görünüyor sys.path, bu yüzden autodoc onları bulamıyor. .rstDosyalar bulunur.
bmu

1

Aynı hatayı aldım ama diğer cevaplarda açıklanandan tamamen farklı bir nedenden kaynaklandı.

Benim .. automethod:: mymodule.funcdirektifim aslında şöyle olmalıydı:

.. automethod:: mymodule::func`

0

İçlerine gömülü kodun çıktısını içeren ilk belgeleri oluşturmak için Pweave ve noweb biçimlendirmesini kullanabilirsiniz. Temel olarak, aşağıdaki gibi işaretli parçalara gömülü python kodu ile ilk dosyanızı yazarsınız:

<<echo=False>>=
print("some text that will appear in the rst file")
@

ve Pweave bu öbekleri çalıştıracak ve onları çıktıları ile değiştirecek ve sonuçta ortaya çıkan ilk dosyada bunu sphinx ile kullanabilirsiniz. Nasıl göründüğüne dair daha fazla ayrıntı için Pweave reST örneğine bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.