Merge remote-tracking branch 'LCTT/master'

This commit is contained in:
Xingyu Wang 2019-11-30 09:35:05 +08:00
commit 308d8861c9
3 changed files with 197 additions and 83 deletions

View File

@ -1,25 +1,25 @@
[#]: collector: (lujun9972)
[#]: translator: (geekpi)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-11624-1.html)
[#]: subject: (How to document Python code with Sphinx)
[#]: via: (https://opensource.com/article/19/11/document-python-sphinx)
[#]: author: (Moshe Zadka https://opensource.com/users/moshez)
如何使用 Sphinx 给 Python 代码写文档
======
最好将文档作为开发过程的一部分。Sphinx 加上 Tox让文档可以轻松书写并且外观漂亮。
> 最好将文档作为开发过程的一部分。Sphinx 加上 Tox让文档可以轻松书写并且外观漂亮。
![Python in a coffee cup.][1]
Python 代码可以在源码中包含文档。这种方式默认依靠 **docstring**,它以三引号格式定义。虽然文档的价值是很大的,但是代码没有充足的文档还是很常见。让我们演练一个场景,了解出色的文档的强大功能。
经历了太多白板技术面试,要求你实现斐波那契数列,你已经受够了。你回家用 Python 写了一个可重用的斐波那契计算器,使用浮点技巧来实现 O(1) 复杂度。
Python 代码可以在源码中包含文档。这种方式默认依靠 **docstring**,它以三引号格式定义。虽然文档的价值是很大的,但是没有充足的文档的代码还是很常见。让我们演练一个场景,了解出色的文档的强大功能。
经历了太多在白板技术面试上要求你实现斐波那契数列,你已经受够了。你回家用 Python 写了一个可重用的斐波那契计算器,使用浮点技巧来实现 `O(1)` 复杂度。
代码很简单:
```
# fib.py
import math
@ -33,8 +33,7 @@ def approx_fib(n):
(该斐波那契数列是四舍五入到最接近的整数的几何序列,这是我最喜欢的鲜为人知的数学事实之一。)
作为一个好人,你可以将代码开源,并将它放在 [PyPI][2] 上。setup.py 文件很简单:
作为一个好人,你可以将代码开源,并将它放在 [PyPI][2] 上。`setup.py` 文件很简单:
```
import setuptools
@ -47,7 +46,7 @@ setuptools.setup(
)
```
但是,没有文档的代码是没有用的。因此,你可以向函数添加 docstring。我最喜欢的 docstring 样式之一是 [“Google” 样式][3]。标记很轻量,这在它位于源代码中时很好。
但是,没有文档的代码是没有用的。因此,你可以向函数添加 docstring。我最喜欢的 docstring 样式之一是 [“Google” 样式][3]。标记很轻量,当它放在源代码中时很好。
```
@ -64,10 +63,9 @@ def approx_fib(n):
# ...
```
但是函数的文档只是成功的一半。普通文档对于情境化代码用法很重要。在这种情况下,上下文是恼人的技术面试。
有一种添加更多文档的方式Pythonic 模式通常是在 **docs/** 添加 **rst** 文件 [reStructuredText][4] 的缩写)。因此**docs/index.rst** 文件最终看起来像这样:
但是函数的文档只是成功的一半。普通文档对于情境化代码用法很重要。在这种情况下,情景是恼人的技术面试。
有一种添加更多文档的方式,专业 Python 人的方式通常是在 `docs/` 添加 rst 文件( [reStructuredText][4] 的缩写)。因此 `docs/index.rst` 文件最终看起来像这样:
```
Fibonacci
@ -86,21 +84,17 @@ fib off.
:members:
```
我们完成了,对吧?我们已经将文本放在了文件中。人们应该看看
我们完成了,对吧?我们已经将文本放在了文件中。人们应该会看的
### 使 Python 文档更漂亮
为了使你的文档看起来更漂亮,你可以利用 [Sphinx][5],它旨在制作漂亮的 Python 文档。这三个 Sphinx 扩展特别有用:
* **sphinx.ext.autodoc**:从模块内部获取文档
* **sphinx.ext.napoleon**:支持 Google 样式的 docstring
* **sphinx.ext.viewcode**:将 ReStructured Text 源码与生成的文档打包在一起
为了告诉 Sphinx 该生成什么以及如何生成,我们在 **docs/conf.py** 中配置一个辅助文件:
* `sphinx.ext.autodoc`:从模块内部获取文档
* `sphinx.ext.napoleon`:支持 Google 样式的 docstring
* `sphinx.ext.viewcode`:将 ReStructured Text 源码与生成的文档打包在一起
为了告诉 Sphinx 该生成什么以及如何生成,我们在 `docs/conf.py` 中配置一个辅助文件:
```
extensions = [
@ -108,12 +102,12 @@ extensions = [
'sphinx.ext.napoleon',
'sphinx.ext.viewcode',
]
# The name of the entry point, without the ".rst" extension.
# By convention this will be "index"
# 该入口点的名称,没有 .rst 扩展名。
# 惯例该名称是 index
master_doc = "index"
# This values are all used in the generated documentation.
# Usually, the release and version are the same,
# but sometimes we want to have the release have an "rc" tag.
# 这些值全部用在生成的文档当中。
# 通常发布release与版本version是一样的
# 但是有时候我们会有带有 rc 标签的发布。
project = "Fib"
copyright = "2019, Moshe Zadka"
author = "Moshe Zadka"
@ -122,43 +116,43 @@ version = release = "2019.1.0"
此文件使我们可以使用所需的所有元数据来发布代码,并注意扩展名(上面的注释说明了方式)。最后,要确保生成我们想要的文档,请使用 [Tox][6] 管理虚拟环境以确保我们顺利生成文档:
```
[tox]
# By default, .tox is the directory.
# Putting it in a non-dot file allows opening the generated
# documentation from file managers or browser open dialogs
# that will sometimes hide dot files.
# 默认情况下,`.tox` 是该目录。
# 将其放在非点文件中可以从
# 文件管理器或浏览器的
# 打开对话框中打开生成的文档,
# 这些对话框有时会隐藏点文件。
toxworkdir = {toxinidir}/build/tox
[testenv:docs]
# Running sphinx from inside the "docs" directory
# ensures it will not pick up any stray files that might
# get into a virtual environment under the top-level directory
# or other artifacts under build/
# 从 `docs` 目录内运行 `sphinx`
# 以确保它不会拾取任何可能进入顶层目录下的
# 虚拟环境或 `build/` 目录下的其他工件的杂散文件。
changedir = docs
# The only dependency is sphinx
# If we were using extensions packaged separately,
# we would specify them here.
# A better practice is to specify a specific version of sphinx.
# 唯一的依赖关系是 `sphinx`
# 如果我们使用的是单独打包的扩展程序,
# 我们将在此处指定它们。
# 更好的做法是指定特定版本的 sphinx。
deps =
sphinx
# This is the sphinx command to generate HTML.
# In other circumstances, we might want to generate a PDF or an ebook
# 这是用于生成 HTML 的 `sphinx` 命令。
# 在其他情况下,我们可能想生成 PDF 或电子书。
commands =
sphinx-build -W -b html -d {envtmpdir}/doctrees . {envtmpdir}/html
# We use Python 3.7. Tox sometimes tries to autodetect it based on the name of
# the testenv, but "docs" does not give useful clues so we have to be explicit.
# 我们使用 Python 3.7。
# Tox 有时会根据 testenv 的名称尝试自动检测它,
# 但是 `docs` 没有给出有用的线索,因此我们必须明确它。
basepython = python3.7
```
现在,无论何时运行T ox它都会为你的 Python 代码生成漂亮的文档。
现在,无论何时运行 Tox它都会为你的 Python 代码生成漂亮的文档。
### 在 Python 中写文档很好
作为 Python 开发人员,我们可以使用的工具链很棒。 我们可以从 **docstring** 开始,添加 **.rst** 文件,然后添加 Sphinx 和 Tox 来为用户美化结果。
作为 Python 开发人员,我们可以使用的工具链很棒。我们可以从 **docstring** 开始,添加 .rst 文件,然后添加 Sphinx 和 Tox 来为用户美化结果。
你对好的文档有何评价? 你还有其他喜欢的方式么? 请在评论中分享它们!
你对好的文档有何评价?你还有其他喜欢的方式么?请在评论中分享它们!
--------------------------------------------------------------------------------
@ -167,7 +161,7 @@ via: https://opensource.com/article/19/11/document-python-sphinx
作者:[Moshe Zadka][a]
选题:[lujun9972][b]
译者:[geekpi](https://github.com/geekpi)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
@ -178,4 +172,4 @@ via: https://opensource.com/article/19/11/document-python-sphinx
[3]: http://google.github.io/styleguide/pyguide.html#381-docstrings
[4]: http://docutils.sourceforge.net/rst.html
[5]: http://www.sphinx-doc.org/en/master/
[6]: https://tox.readthedocs.io/en/latest/
[6]: https://tox.readthedocs.io/en/latest/

View File

@ -1,16 +1,18 @@
[#]: collector: (lujun9972)
[#]: translator: (wxy)
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: reviewer: (wxy)
[#]: publisher: (wxy)
[#]: url: (https://linux.cn/article-11623-1.html)
[#]: subject: (Displaying dates and times your way)
[#]: via: (https://www.networkworld.com/article/3481602/displaying-dates-and-times-your-way-with-linux.html)
[#]: author: (Sandra Henry-Stocker https://www.networkworld.com/author/Sandra-Henry_Stocker/)
按你的方式显示日期和时间
在终端里按你的方式显示日期和时间
======
> Linux date 命令提供了很多显示日期和时间的选项,要比你想的还要多。这是一些更有用的选择。
> Linux 的 date 命令提供了很多显示日期和时间的选项,要比你想的还要多。这是一些有用的选择。
![](https://img.linux.net.cn/data/attachment/album/201911/29/144555a8mq82mcc9cfttt9.jpg)
在 Linux 系统上,`date` 命令非常简单。你键入 `date`,日期和时间将以一种有用的方式显示。它包括星期几、日期、时间和时区:
@ -21,14 +23,14 @@ Tue 26 Nov 2019 11:45:11 AM EST
只要你的系统配置正确,你就会看到日期和当前时间以及时区。
但是,该命令还提供了许多选项来以不同方式显示日期和时间信息。例如,如果要显示日期以进行排序,则可能需要使用如下命令:
但是,该命令还提供了许多选项来以不同方式显示日期和时间信息。例如,如果要显示日期以便进行排序,则可能需要使用如下命令:
```
$ date "+%Y-%m-%d"
2019-11-26
```
在这种情况下,年、月和日按该顺序排列。请注意,我们使用大写字母 `Y` 来获得四位数的年份。如果我们使用小写的 `y`,则只会看到两位数字的年份(例如 19。不要让这种想法使你联想到,如果 `m` 给你一个数字月份,`M` 可能会给你月份的名称。不,`M` 将给你分钟数。要以缩写名称格式获得月份,你要使用 `b`,而对于完全拼写的月份,则要使用 `B`
在这种情况下,年、月和日按该顺序排列。请注意,我们使用大写字母 `Y` 来获得四位数的年份。如果我们使用小写的 `y`,则只会看到两位数字的年份(例如 19。不要让这种做法使你错误地联想到如果 `m` 给你一个数字月份,`M` 可能会给你月份的名称。不,`M` 将给你分钟数。要以缩写名称格式获得月份,你要使用 `b`,而对于完全拼写的月份,则要使用 `B`
```
$ date "+%b %B"
@ -38,7 +40,7 @@ Nov November
或者,你可能希望以这种常用格式显示日期:
```
$ date +%D
$ date "+%D"
11/26/19
```
@ -66,7 +68,7 @@ Report-2019-11-21
Report-2019-11-20
```
你还可以在日期字符串中添加其他详细信息。可用的各种选项令人惊讶。你可以使用 `date "+%q"` 来显示你所在的一年中的哪个季度,或使用类似以下命令来显示两个月前的日期:
你还可以在日期字符串中添加其他详细信息。可用的各种选项多得令人惊讶。你可以使用 `date "+%q"` 来显示你所在的一年中的哪个季度,或使用类似以下命令来显示两个月前的日期:
```
$ date --date="2 months ago"
@ -82,7 +84,7 @@ $ date --date="next week thu"
Thu 05 Dec 2019 12:00:00 AM EST
```
`date` 命令的手册页列出了其所有选项。该列表令人难以置信,但是你可能会发现一些日期/时间显示选项非常适合。以下是一些你可能会发现有趣的东西。
`date` 命令的手册页列出了其所有选项。该列表多得令人难以置信,但是你可能会发现一些日期/时间显示选项非常适合。以下是一些你可能会发现有趣的东西。
世界标准时间UTC
@ -98,53 +100,53 @@ $ date +%s
1574774137
```
`date` 命令选项的完整列表。正如我所说,它比我们大多数人想象的要广泛得多。
以下`date` 命令选项的完整列表。正如我所说,它比我们大多数人想象的要广泛得多。
- `%%` 字母
- `a` 语言环境的缩写星期名称(例如,日 / Sun
- `A` 语言环境的完整星期名称(例如,星期日 / Sunday
- `b` 语言环境的缩写月份名称(例如 一 / Jan
- `B` 语言环境的完整月份名称(例如,一月 / January
- `c` 语言环境的日期和时间(例如 2005年3月3日 星期四 23:05:25 / Thu Mar 3 23:05:25 2005
- `%%` 显示字母
- `a` 本地语言环境的缩写星期名称(例如,日 / Sun
- `A` 本地语言环境的完整星期名称(例如,星期日 / Sunday
- `b` 本地语言环境的缩写月份名称(例如 一 / Jan
- `B` 本地语言环境的完整月份名称(例如,一月 / January
- `c` 本地语言环境的日期和时间(例如 2005年3月3日 星期四 23:05:25 / Thu Mar 3 23:05:25 2005
- `C` 世纪;类似于 `Y`但省略了后两位数字例如20
- `%d` 月份的天例如01
- `D` 日期;与 `m/d/y` 相同
- `e` 月份的天,填充前缀空格;与 `_d` 相同
- `F` 完整日期;与 `Y-m-d` 相同
- `g` ISO 周号的年份的后两位数字(请参见 `G`
- `%G` ISO 周号的年份(请参阅 `V`);通常仅配合 `V`
- `%G` ISO 周号的年份(请参阅 `V`);通常仅配合 `V` 使
- `h``b` 相同
- `H` 小时00..23
- `I` 小时01..12
- `H` 24 小时制的小时00..23
- `I` 12 小时制的小时01..12
- `%j` 一年的天001..366
- `k` 小时,填充前缀空格( 0..23);与 `_H` 相同
- `l` 小时,填充前缀空格( 1..12);与 `_I` 相同
- `k` 24 小时制的小时,填充前缀空格( 0..23);与 `_H` 相同
- `l` 12 小时制的小时,填充前缀空格( 1..12);与 `_I` 相同
- `m` 月份01..12
- `M` 分钟00..59
- `n` 换行符
- `N` 纳秒000000000..999999999
- `%p` 语言环境中等同于 AM 或 PM 的字符串;如果未知,则为空白
- `%p` 本地语言环境中等同于 AM 或 PM 的字符串;如果未知,则为空白
- `P``p`,但使用小写
- `q` 季度1..4
- `r` 语言环境的 12 小时制时间(例如,晚上 11:11:04 / 11:11:04 PM
- `r` 本地语言环境的 12 小时制时间(例如,晚上 11:11:04 / 11:11:04 PM
- `R` 24 小时制的小时和分钟;与 `H:M` 相同
- `%s` 自 1970-01-01 00:00:00 UTC 以来的秒数
- `S`00..60
- `t` 制表符
- `T` 时间;与 `H:M:S` 相同
- `u` 星期1..71 是星期一
- `U` 年的周数,以星期日为一周的第一天00..53
- `V` ISO 周号以星期一为一周的第一天01..53
- `U` 年的周号,以星期日为一周的第一天,从 00 开始00..53
- `V` ISO 周号,以星期一为一周的第一天,从 01 开始01..53
- `w` 星期0..60 是星期日
- `W` 年的周数,星期一为一周的第一天00..53
- `x` 语言环境的日期表示形式例如1999年12月31日 / 12/31/99
- `X` 语言环境的时间表示形式例如23:13:48
- `W` 年的周号,星期一为一周的第一天,从 00 开始00..53
- `x` 本地语言环境的日期表示形式例如1999年12月31日 / 12/31/99
- `X` 本地语言环境的时间表示形式例如23:13:48
- `y` 年的最后两位数字00..99
- `Y`
- `Y`
- `z` +hhmm 格式的数字时区(例如,-0400
- `:z` +hh:mm 格式的数字时区(例如,-04:00
- `::z` +hh:mm:ss 格式的时区(例如 -04:00:00
- `:::z` 数字时区,带有 `:` 达到必要的精度(例如 -04+05:30
- `::z` +hh:mm:ss 格式的数字时区(例如,-04:00:00
- `:::z` 数字时区,`:` 指明精度(例如,-04, +05:30
- `Z` 字母时区缩写例如EDT
--------------------------------------------------------------------------------
@ -154,7 +156,7 @@ via: https://www.networkworld.com/article/3481602/displaying-dates-and-times-you
作者:[Sandra Henry-Stocker][a]
选题:[lujun9972][b]
译者:[wxy](https://github.com/wxy)
校对:[校对者ID](https://github.com/校对者ID)
校对:[wxy](https://github.com/wxy)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出

View File

@ -0,0 +1,118 @@
[#]: collector: (lujun9972)
[#]: translator: ( )
[#]: reviewer: ( )
[#]: publisher: ( )
[#]: url: ( )
[#]: subject: (A quick introduction to Toolbox on Fedora)
[#]: via: (https://fedoramagazine.org/a-quick-introduction-to-toolbox-on-fedora/)
[#]: author: (Ryan Walter https://fedoramagazine.org/author/rwaltr/)
A quick introduction to Toolbox on Fedora
======
![][1]
Toolbox allows you to [sort and manage your development environments in containers][2] without requiring root privileges or manually attaching volumes. It creates a container where you can install your own CLI tools, without installing them on the base system itself. You can also utilize it when you do not have root access or cannot install programs directly. This article gives you an introduction to toolbox and what it does.
### Installing Toolbox
[Silverblue][3] includes Toolbox by default. For the Workstation and Server editions, you can grab it from the default repositories using _dnf install toolbox_.
### Creating Toolboxes
Open your terminal and run _toolbox enter_. The utility will automatically request permission to download the latest image, create your first container, and place your shell inside this container.
```
$ toolbox enter
No toolbox containers found. Create now? [y/N] y
Image required to create toolbox container.
Download registry.fedoraproject.org/f30/fedora-toolbox:30 (500MB)? [y/N]: y
```
Currently there is no difference between the toolbox and your base system. Your filesystems and packages appear unchanged. Here is an example using a repository that contains documentation source for a resume under a _~/src/resume_ folder. The resume is built using the _pandoc_ tool.
```
$ pwd
/home/rwaltr
$ cd src/resume/
$ head -n 5 Makefile
all: pdf html rtf text docx
pdf: init
pandoc -s -o BUILDS/resume.pdf markdown/*
$ make pdf
bash: make: command not found
$ pandoc -v
bash: pandoc: command not found
```
This toolbox does not have the programs required to build the resume. You can remedy this by installing the tools with _dnf_. You will not be prompted for the root password, because you are running in a container.
```
$ sudo dnf groupinstall "Authoring and Publishing" -y && sudo dnf install pandoc make -y
...
$ make all #Successful builds
mkdir -p BUILDS
pandoc -s -o BUILDS/resume.pdf markdown/*
pandoc -s -o BUILDS/resume.html markdown/*
pandoc -s -o BUILDS/resume.rtf markdown/*
pandoc -s -o BUILDS/resume.txt markdown/*
pandoc -s -o BUILDS/resume.docx markdown/*
$ ls BUILDS/
resume.docx resume.html resume.pdf resume.rtf resume.txt
```
Run _exit_ at any time to exit the toolbox.
```
$ cd BUILDS/
$ pandoc --version || ls
pandoc 2.2.1
Compiled with pandoc-types 1.17.5.4, texmath 0.11.1.2, skylighting 0.7.5
...
for a particular purpose.
resume.docx resume.html resume.pdf resume.rtf resume.txt
$ exit
logout
$ pandoc --version || ls
bash: pandoc: command not found...
resume.docx resume.html resume.pdf resume.rtf resume.txt
```
You retain the files created by your toolbox in your home directory. None of the programs installed in your toolbox will be available outside of it.
### Tips and tricks
This introduction to toolbox only scratches the surface. Here are some additional tips, but you can also check out [the official documentation][2].
* _Toolbox help_ will show you the man page for Toolbox
* You can have multiple toolboxes at once. Use _toolbox create -c Toolboxname_ and _toolbox enter -c Toolboxname_
* Toolbox uses [Podman][4] to do the heavy lifting. Use _toolbox list_ to find the IDs of the containers Toolbox creates. Podman can use these IDs to perform actions such as _rm_ and _stop_. (You can also read more about Podman [in this Magazine article][5].)
* * *
_Photo courtesy of [Florian Richter][6] from [Flickr][7]._
--------------------------------------------------------------------------------
via: https://fedoramagazine.org/a-quick-introduction-to-toolbox-on-fedora/
作者:[Ryan Walter][a]
选题:[lujun9972][b]
译者:[译者ID](https://github.com/译者ID)
校对:[校对者ID](https://github.com/校对者ID)
本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译,[Linux中国](https://linux.cn/) 荣誉推出
[a]: https://fedoramagazine.org/author/rwaltr/
[b]: https://github.com/lujun9972
[1]: https://fedoramagazine.org/wp-content/uploads/2019/11/toolbox-816x345.jpg
[2]: https://docs.fedoraproject.org/en-US/fedora-silverblue/toolbox/
[3]: https://fedoramagazine.org/what-is-silverblue/
[4]: https://podman.io/
[5]: https://fedoramagazine.org/running-containers-with-podman/
[6]: https://flickr.com/photos/florianric/
[7]: https://flickr.com/photos/florianric/7263382550/