V2EX POST
639 subscribers
138 photos
31 videos
99 files
102K links
v2ex新贴定时推送,可按需置顶本频道然后关闭通知
Download Telegram
Python 没有管理或者一键安装升级脚本吗?

centos7 服务器上,
python -V: Python 2.7.5
python3 -V: Python 3.6.8

好在服务器能快照,试了一些文章的包括不限于删除 python2 ,改什么软链接到 python3 ,看的太晕了,我就一玩家,又不太理解这些链接啥的,几乎都失败了,估计是啥路径不一样导致的。

我现在就想安装一个东西,pip install XXXX ,但是提示我 python2 太低了,我就用 pip3 install XXXX 能装上,但是无法运行,估计运行又默认用到 python2 了,或者 Python 3.6.8 版本太低了,我看官网都 3.10 了,但是查了升级也挺复杂。

#Python #python2 #python3 #3.6 #install #XXXX #服务器 #太低 #链接 #快照
请教 drf 全局封装 response 的优雅实现

#### 在使用 drf 的时候,当有错误的时候默认的 http response 都是 http state ,但是和前端的交互中,前端希望得到如下的这种 json 形式,包括我自己写前端的时候也想要这种形式的返回。

```json
{
"code": 200,
"msg": "ok",
"data": { some data }
}
{
"code": 404,
"msg": "http not found",
"data": null
}
```

我说一下我之前的实现,这种实现我认为很怪,而且并不能完美封装一些 500 错误,想请教一下有没有什么可以优雅的方式。

---

首先我使用一个 dataclasses.dataclass 进行定义返回数据结构(code,msg,data)

```python3
from dataclasses import dataclass
from typing import Any


@dataclass
class Result:
code: int
msg: str
data: Any
```

后面我需要打各种补丁

- 在 api view 中使用 JsonResponse 进行返回,当然也包括一些业务上的逻辑判断都可以在这里进行处理

```python3
from dataclasses import asdict
from django.http import JsonResponse
from rest_framework import views


class SomeApiView(views.APIView):

def get(, request, *args, **kwargs) -> JsonResponse:
# do something
return JsonResponse(asdict(Result(200, 'ok', null)))
```

- modelviewset 的处理(继承 mixin 对返回做处理),如下,只写了一个举例:

```
from dataclasses import asdict
from django.http import JsonResponse
from rest_framework import status, mixins

class MyRetrieveModelMixin(mixins.RetrieveModelMixin):

def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
return JsonResponse(asdict(Result(200, 'ok', serializer.data)))
```

- 全局异常处理,对类似 drf-jwt,drf-serializer 中的一些错误,只能在 settings.py 中的 rest framework 中进行异常处理配置,并且用这个方法去处理,这种形式总感觉特别怪。

```python3
# 配置
REST_FRAMEWORK = {
# ...
# 异常处理(统一封装为 code msg data 格式)
'EXCEPTION_HANDLER': 'utils.result_handler.custom_exception_handler',
# ...
}
```
```python3
def custom_exception_handler(exc, context):

response = exception_handler(exc, context)

if response is not None:
# logger
# 进行一些处理 处理成 Result(code, msg, data)
# 这里对很多处理,尤其 serializer 中的处理 特别烦!
# 比如手机号唯一约束,前端就想要 code:400 msg:"该手机号已被使用"
return JsonResponse(...)
```

### 说实话这些补丁看的我有些难受,很想知道有没有什么优雅的处理方式

### thanks !

#data #import #code #msg #JsonResponse #处理 #http #serializer #dataclasses #python3
家人们,有没有一键安装 Python 的脚本可以使用?或者怎么把 Python 弄成绿色💚软件

(老是需要帮别人装 python3 ,就想自动化一下


要求是:

1. 跨平台 (win + mac + linux)
2. 尽可能的轻量
3. 最好是脚本之类的能通过命令行跑的,因为我想加一些功能,比如只装 python3 ,或者检测”已经装了就不装了”。


我自己找到的:

1. conda ,就太大了。比 python 本身还大
2. 又比如弄成绿色版( portable ),直接能用就行?其实也能符合我的要求,但是好像也没有找到
3. 感觉像 https://github.com/nvm-sh/nvm 这种就比较合适,但 nvm 是安装 node.js 的

#nvm #python3 #跨平台 #轻量 #win #mac #linux #我想加 #只装 #conda
有用 dtale 分析数据的大神吗?我遇到问题了请进

python3.9.13 下运行下面的代码
df = pd.DataFrame([dict(a=1,b=2,c=3)])
d = dtale.show(df)
没有任何显示也没有任何 log 打印,既不显示也不报错。有大神知道怎么回事吗?

#df #报错 #python3.9 #13 #pd #DataFrame #dict #dtale #show #log
一个非常奇怪的问题, supervisord 启动的用 aiohttp 发请求的爬虫同时发 10 万请求的情况下有大约 30%的请求会无法解析域名,而在 bash 中手动运行则没有这个问题, Google 上没找到一个类似情况的

这是 supervisor 的配置:

```
[program:watchdog]
command=python3.9 /app/watchdog/wd.py
directory=/app/watchdog/
user=root
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/watchdog.log
loglevel=info
startsecs = 20
```

程序的代码涉及比较复杂的业务逻辑暂时没办法发出来。

有什么办法排查吗?

#watchdog #app #true #log #supervisor #program #command #python3.9 #wd #py
m1 下如何安装 python2.7 的 numpy

描述:
macbook air m1
pyenv 创建的 python2.7.18 虚拟环境
在 pip install numpy 时报错, google 了很久, 结果都是 python3 的解决方案

如果使用 pyenv 创建 python3 的虚拟环境, 安装很顺利
但是项目是历史遗留的, 是 python2.7 的版本

目前想到的方案, 是使用 docker
想问下是否有直接安装的方案

#虚拟环境 #pyenv #python2.7 #python3 #创建 #安装 #问下 #macbook #air #m1
万万没想到, Python 的字符串裁切函数居然还能有 bug

吐个槽,大家猜猜 python3 执行这 2 句话都会出现什么?
```python
print('test.py'.rstrip(".py"))
print('testy.py'.rstrip(".py"))
```
这 2 句呢
```
print('test6y'.rstrip("6y"))
print('testy6y'.rstrip("6y"))
```

#print #py #rstrip #6y #吐个 #python3 #python #test #testy #test6y