flo*_*iel 5 python python-import python-3.x python-sphinx
我尝试使用 Sphinx-doc 的自动文档。我想解决以下问题。目前,StackOverflow 的任何解决方案都不起作用。是由于我的项目结构还是由于我选择导入模块的方式?
给定文件结构:
project
|_ src
| |_ pre_processing
| | |_ fileInfo.py
| |
| |_ utils
| |_ folder.py
|_ test
|
|_ doc
| |_ doc_user
| |_ build
| |_ source
| |_config.py
Run Code Online (Sandbox Code Playgroud)
以下配置 sys.path :
import os
import sys
sys.path.insert(0, os.path.abspath('../../../src/'))
Run Code Online (Sandbox Code Playgroud)
我在 fileInfo.py 中有一些相对导入:
from ..utils.folder import get_files_directory
Run Code Online (Sandbox Code Playgroud)
终端错误
WARNING: autodoc: failed to import module 'pre_processing.fileInfo'; the following exception was raised:
Traceback (most recent call last):
File "/home/florian-stage/miniconda/envs/gd/lib/python3.5/site-packages/sphinx/ext/autodoc/importer.py", line 140, in import_module
__import__(modname)
File "/home/florian-stage/Projet-2018/pg_georef_data-master/arbo propre/src/pre_processing/fileInfo.py", line 12, in <module>
from ..utils.folder import get_files_directory
ValueError: attempted relative import beyond top-level package
Run Code Online (Sandbox Code Playgroud)
看来您的问题与您的项目结构有关。正如CristiFati__init__.py建议的那样,您的每个文件夹中都应该有文件,包括project. 软件包上的文档认为这是必要的:
需要init .py文件才能使 Python 将目录视为包含包;这样做是为了防止具有通用名称(例如字符串)的目录无意中隐藏稍后出现在模块搜索路径上的有效模块。
为了测试您的代码,您需要从某个main.py文件运行,因为导入将相对于顶级文件夹(project在本例中)。文件结构应如下所示:
project
| __init__.py
| main.py
|_ src
| | __init__.py
| |_ pre_processing
| | | __init__.py
| | | fileInfo.py
| |
| |_ utils
| | __init__.py
| | folder.py
|_ test
| | __init__.py
|
|_ doc
| | __init__.py
| |_ doc_user
| | __init__.py
| |_ build
| | __init__.py
| |_ source
| | __init__.py
| | config.py
Run Code Online (Sandbox Code Playgroud)
那么main.py你应该有:
from src.pre_processing import fileInfo
Run Code Online (Sandbox Code Playgroud)
现在运行main.py应该会产生无错误的输出。
| 归档时间: |
|
| 查看次数: |
2656 次 |
| 最近记录: |