2

フラスコ プロジェクトのドキュメントを作成しようとしていますが、パスに問題があります。

私のプロジェクト構造は次のようなものです:

myproject
    config
        all.py
        __init__.py
        logger.py
        logger.conf
    myproject
        models.py
        __init__.py
    en (english language docs folder)
        conf.py

logger.py には行が含まれています

with open('logger.conf') as f: CONFIG = ast.literal_eval(f.read())

logger.conf から構成を読み取ります

「HTMLを作成」しながら

モデルに応じて多くのエラーが発生します。

/home/username/projects/fb/myproject/en/models/index.rst:7: WARNING: autodoc: failed to import class u'User' from module u'myproject.models'; the following exception was raised:
Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/sphinx/ext/autodoc.py", line 326, in import_object
__import__(self.modname)
  File "/home/username/projects/fb/myproject/myproject/__init__.py", line 14, in <module>
from logger import flask_debug
  File "/home/username/projects/fb/myproject/logger.py", line 5, in <module>
with open('logger.conf') as f: CONFIG = ast.literal_eval(f.read())
IOError: [Errno 2] No such file or directory: 'logger.conf'

conf.py にはパスが含まれているため、これは奇妙です: sys.path.insert(0, '/home/username/projects/fb/myproject/')

sys.path を印刷すると、パスがそこにあることが示されます。

logger.py の logger.conf ファイルに FULL PATH を貼り付けると、それと同様の別の行に移動し、別のファイルに対して同じエラーがスローされます。

Sphinx が sys.path に相対的なパス ファイルをチェックしないのはなぜですか?

「./file」または「file」では機能しないためです。「../file」でのみ機能し始めました-すべてのパスを変更しましたが、「破壊された」pythonが機能しているため、pythonの場合はパスが壊れています。

4

2 に答える 2

4

その振る舞いがopen()問題です。open()andなどのコマンドはchdir()、現在のディレクトリ (おそらく makefile があるディレクトリ) から機能します。

print(os.listdir('.')それをテストするには、呼び出しの上に を追加しopen('logger.conf')ます。これにより、問題が表示されます。

ソリューション?絶対パスを使用してください。したがって、少し冗長にすると、次のようになります。

import os

this_directory = os.path.dirname(__file__)
# __file__ is the absolute path to the current python file.
open(os.path.join(this_directory, 'logger.conf'))

Python パッケージ (="it has an setup.py") に変換した場合のボーナス ポイント。その場合、次のことができます。 

import pkg_resources

open(pkg_resources.resource_filename('myproject.config', 'logger.conf'))
于 2013-09-04T07:26:56.997 に答える
3

私のコンピューターではなく組み込みシステムで実行するように記述されていない Python コードの sphinx ドキュメントを生成するときに、同様の問題が発生しました。その場合、既存のコードが私のコンピューターに存在しないファイルを開こうとしたため、sphinx が失敗しました。この場合、最初にファイルの存在を確認するようにコードを変更することにしました。これにより、Sphinx は問題なくこのロジックを通過できるようになりました。

if os.path.isfile(filename):
    # open file here
else:
    # handle error in a way that doesn't make sphinx crash
    print "ERROR: No such file: '%s'" % filename

少しの間、私は open() をモックしようとましたが、sphinx が仕事をするために open() を必要とすることがわかりました。

于 2013-10-09T14:10:26.510 に答える