gitbook simple use

更新说明: 
由于在 Linux 内核的机器上安装 Calibre 需要安装的依赖库过多,故不推荐在此类机器上使用格式转换功能。你可以阅读 在自己的电脑上安装GitBook For Mac 来了解在 Mac 上完美使用 Gitbook .

无意间发现在这个开源的EBook制作软件GitBook,你可以在官网上配置相关信息来和自己的GitHub账号绑定来创建自己的EBook,并且支持生成PDF、ePub和MOBI 三种格式提供下载。 
但是我想自己安装GitBook来生成HTML格式,那样就可以放在自己的网站里面了。 
安装过程:

  • 安装基本环境 
    • 安装Git
    • 安装NVM、Node.js和NPM
    • 升级Python版本到2.7.1以上
  • 安装GitBook及calibre组件
  • 初始化并生成Demo
  • 生成HTML以及其他格式的文件

安装基本环境

安装Git

CentOS安装Git的过程我写在自己的问答网站了,点击 CentOS安装Git

安装NVM、Node.js和NPM

快速搭建 Node.js / io.js 开发环境以及加速 npm

升级Python版本到2.7.1以上

由于GitBook生成多格式的文件需要用到calibre,calibre最新版要求Python ≥ 2.7.1 not 3.x 。 
查看Python版本:python ,看结果中Python的版本是否符合要求。 
如果需要升级Python,请查看:centos系统升级python 2.7.3

安装GitBook及calibre组件

安装GitBook:

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">$ npm install gitbook<span class="hljs-attribute" style="box-sizing: border-box;">-cli</span> <span class="hljs-attribute" style="box-sizing: border-box;">-g</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

安装calibre: 
Calibre安装文档 For Linux 
我找到的安装代码如下:

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">wget -nv -<span class="hljs-constant" style="box-sizing: border-box;">O</span>- <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">https:</span>/<span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/raw.githubusercontent.com/kovidgoyal</span><span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/calibre/master</span><span class="hljs-regexp" style="color: rgb(0, 136, 0); box-sizing: border-box;">/setup/linux</span>-installer.py | python -c <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"import sys; main=lambda x:sys.stderr.write('Download failed\n'); exec(sys.stdin.read()); main('/opt')"</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

命令的最后 main('/opt') 中/opt 为Calibre的安装目录,可根据需要修改。

初始化并生成Demo

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>cd /home/
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>mkdir gitbook
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>cd gitbook/
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>mkdir demo
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>cd demo/
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>gitbook init</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li></ul>

执行最后一个命令之后会在 /home/gitbook/demo/ 下生成 README.md 和 SUMMARY.md 两个文件

生成HTML以及其他格式的文件

1.生成完整的静态 HTML:切换到书的目录后built 即可

<code class="hljs ruby has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;"><span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>cd /home/gitbook/demo/
<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">$ </span>gitbook build</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li></ul>

会在/home/gitbook/demo/ 目录下生成 _book 目录,即为完整的HTML静态网站

2.生成其他格式的文件 
先切换到项目的目录下:比如本机的/home/gitbook/

PDF:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">gitbook pdf ./demo ./demo<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.pdf</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

ePub:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">gitbook epub ./demo ./demo<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.epub</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

MOBI:

<code class="hljs avrasm has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">gitbook mobi ./demo ./demo<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">.mobi</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

注:需要提前安装Calibre,Gitbook会使用其中的ebook-convert功能组件来完成书籍格式的转换。

我遇到的Bug

由于我未学习过Node.js和Python,在 安装calibre 那一步出错了,导致在GitBook生成其他格式文件的时候出问题,生成pdf 和 mobi 会失败,但是 epub却成功了

安装calibre时的错误信息:

<code class="hljs markdown has-numbering" style="display: block; padding: 0px; background: transparent; color: inherit; box-sizing: border-box; font-family: "Source Code Pro", monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal;">Failed to find directory to install bash completions, using default.
<span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span> WARNING <span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span>
Setting up completion failed with error:
<span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span>
<span class="hljs-code" style="box-sizing: border-box;">    Traceback (most recent call last):</span>
<span class="hljs-code" style="box-sizing: border-box;">      File "site-packages/calibre/linux.py", line 748, in setup_completion</span>
<span class="hljs-code" style="box-sizing: border-box;">      File "site-packages/calibre/linux.py", line 505, in write_completion</span>
<span class="hljs-code" style="box-sizing: border-box;">      File "site-packages/calibre/gui2/__init__.py", line 8, in <module></span>
<span class="hljs-code" style="box-sizing: border-box;">    ImportError: cannot import name QStyle</span>

Setting up desktop integration...
<span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span> WARNING <span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span>
Setting up desktop integration failed with error:
<span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span><span class="hljs-strong" style="box-sizing: border-box;">_____</span>
<span class="hljs-code" style="box-sizing: border-box;">    Traceback (most recent call last):</span>
<span class="hljs-code" style="box-sizing: border-box;">      File "site-packages/calibre/linux.py", line 781, in setup_desktop_integration</span>
<span class="hljs-code" style="box-sizing: border-box;">      File "site-packages/calibre/linux.py", line 1097, in render_img</span>
<span class="hljs-code" style="box-sizing: border-box;">    ImportError: cannot import name QImage</span>

Creating un-installer: /usr/bin/calibre-uninstall

There were 2 warnings

<span class="hljs-bullet" style="box-sizing: border-box;">* </span>Setting up completion failed with error:

<span class="hljs-bullet" style="box-sizing: border-box;">* </span>Setting up desktop integration failed with error:

Run "calibre" to start calibre </code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; background-color: rgb(238, 238, 238); top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right: 1px solid rgb(221, 221, 221); list-style: none; text-align: right;"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li></ul>

从 ImportError: cannot import name QStyle 和 ImportError: cannot import name QImage来看,估计是Python少了什么库,希望能解决这个问题的博友指点一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值