一、FastApi接口文档/docs中静态资源文件修改为本地文件
FastApi可以直接生成接口文档,但生成的接口页面中引用的是外网的资源,包括favicon.png文件和js,css文件,引用如下:
<link type="text/css" rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@3.30.0/swagger-ui.css">
<link rel="shortcut icon" href="https://fastapi.tiangolo.com/img/favicon.png">
<title>FastAPI - Swagger UI</title>
</head>
<body>
<div id="swagger-ui">
</div>
<script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist@3.30.0/swagger-ui-bundle.js"></script>
在某些情况下,本地开发时不允许访问外网,于是就想将这些文件修改为本地文件,试着找了一下了,发现了其引用的位置。我这里使用的是Anaconda集成环境,你可以尝试找fastapi代码包的地址,我的地址如下:D:\Anaconda3\Lib\site-packages\fastapi\openapi。在此fastapi的目录中的docs.py文件里配置了get_swagger_ui_html,包括上面三个html元素的地址,修改这里为本地的地址即可。如下:
#. 文章评论:
Level : 1. User:us20210203100012-136 Time:2021-02-18 09:43:05
大佬 不行啊 chrome提示not allowed to load local resource
Level : 2. User:us20210312094212-523 Time:2021-03-12 09:44:55
不应该这样做,而是参考官方文档,设置static目录。https://fastapi.tiangolo.com/advanced/extending-openapi/?h=get_swagger_ui_html
Level : 3. User:us20210318085028-832 Time:2021-03-18 08:54:53
[04007回复level2]:嗯,之前没找到文档,方法可行,比较正规。
Level : 4. User:us20210318085028-832 Time:2021-03-18 08:55:28
[04007回复level1]:修改了地址也同时要把资源文件下载存放到地址对应的目录。
Level : 5. User:us20220519104403-382 Time:2022-05-19 11:37:16
想问下怎么引用本地文件?
Level : 6. User:us20220524191855-134 Time:2022-05-24 19:19:53
[04007回复level5]: 见这篇文章:http://www.***.cn/article/1142.html (现已失效,请在CSDN博客中搜索:FastApi自定义接口文档/docs中的静态资源文件 )
二、Ubuntu下python报错ModuleNotFoundError: No module named apt_pkg的解决
某台新服务器拿到手之后登录上去执行很多操作都报错:ModuleNotFoundError: No module named 'apt_pkg';包括apt-get update操作等。此问题出现的原因多是服务器上的python版本混乱导致的,而某个python版本又缺少对应版本的apt_pkg模块从而引发这个错误。
问题解决的思路。首先排查当前使用的python和python3的版本,我一般在服务器上都会统一这两个版本;第二查找当前服务器上的apt_pkg模块的版本。apt_pkg模块放在python目录下的dist-packages目录下。过程如下:
#查看当前python版本
root@back:~# which python
root@back:~# whereis python
python: /usr/bin/python3.6 /usr/bin/python3.8 /usr/lib/python3.6 /usr/lib/python3.7 /usr/lib/python3.8 /usr/lib/python2.7 /etc/python3.6 /etc/pyth
#查看python3最终的执行文件路径
root@back:~# which python3
/usr/bin/python3
root@back:/usr/lib# ll /usr/bin/python3
lrwxrwxrwx 1 root root 25 Sep 16 15:47 /usr/bin/python3 -> /etc/alternatives/python3*
root@back:/usr/lib# ll /etc/alternatives/python3
lrwxrwxrwx 1 root root 18 Sep 16 15:48 /etc/alternatives/python3* -> /usr/bin/python3.8*
#查看当前apt_pkg的版本
root@back:/usr/lib# ll /usr/lib/python3/dist-packages/ |grep apt_pkg
-rw-r--r-- 1 root root 316040 Feb 21 2018 apt_pkg.cpython-36m-x86_64-linux-gnu.so
解决办法我认为可以有两种:
一种是根据当前存在的apt_pkg模块,将当前的python环境版本调整至apt_pkg模块的版本,比如apt_pkg.cpython-36m-x86_64-linux-gnu.so 这里的-36m-就是表示是python3.6版本,则可以把当前的python版本都调整为python3.6版本。
一种是根据你要使用的python环境版本来增加apt_pkg模块,比如你要调整为python3.8版本, 则需要下载apt_pkg.cpython-38m-x86_64-linux-gnu.so文件,可以尝试将这个文件复制然后改一下名字,有可能有效。但我未进行尝试。
解决方法:更改找到最终python链接修改其至python3.6, 同时我喜欢直接使用python命令也指向3.6。如此即可。
root@back:/usr/lib# ln -sf /usr/bin/python3.6 /etc/alternatives/python3
root@back:/usr/lib# ln -s /usr/bin/python3 /usr/bin/python