我使用以下方法创建了我的 python 虚拟环境:
python3 -m venv venv3
Run Code Online (Sandbox Code Playgroud)
激活,我source venv3/bin/activate
。
venv3/bin/activate
似乎没有那么复杂:
# This file must be used with "source bin/activate" *from bash*
# you cannot run it directly
deactivate () {
# reset old environment variables
if [ -n "$_OLD_VIRTUAL_PATH" ] ; then
PATH="$_OLD_VIRTUAL_PATH"
export PATH
unset _OLD_VIRTUAL_PATH
fi
if [ -n "$_OLD_VIRTUAL_PYTHONHOME" ] ; then
PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME"
export PYTHONHOME
unset _OLD_VIRTUAL_PYTHONHOME
fi
# This should detect bash and zsh, which have a hash command that must
# be …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Django 2.2.6。
运行我的 django 项目的同一个系统也有一个后台服务在运行,它在 unix 套接字上监听请求。在 Django Admin 中,如果用户点击按钮,Django 会在 unix socket 上发送请求,后台服务会做一些事情。
我的后台服务可以完全访问 Django 的 ORM。它从我的项目的models.py 中导入模型,并且可以毫无问题地查询数据库。
问题是,如果我离开我的 django,我的后台服务在一夜之间运行,登录到 Django Admin,然后点击按钮,我的后台服务会抛出一个异常:
django.db.utils.OperationalError: (2006, 'MySQL server has gone away')
Run Code Online (Sandbox Code Playgroud)
看来这是因为 MySQL 数据库有一个超时期限,称为wait_timeout
. 如果到数据库的连接长时间不活动,MySQL 将断开它。不幸的是,Django 没有注意到,并尝试使用它,抛出错误。
幸运的是,Django 为 settings.py 中定义的每个数据库都有自己的内置 CONN_MAX_AGE 变量。如果数据库连接比 CONN_MAX_AGE 旧,它会在请求之前关闭它并启动一个新的连接。
查看我的 MySQL 数据库:
> show session variables where variable_name = "wait_timeout";
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
Run Code Online (Sandbox Code Playgroud)
查看我的 Django 的 CONN_MAX_AGE 变量:
# ./manage.py shell
>>> …
Run Code Online (Sandbox Code Playgroud) 我正在用 Python3 编写一些软件,旨在备份 Windows 客户端上的目录结构,并将其发送到 Linux 服务器。
我遇到的问题是如何处理 Windows 和 Linux 文件路径。我需要 Windows 客户端创建一个表示源文件的相对路径的对象,将该相对路径发送到服务器,以便服务器知道将文件写入目标文件夹中的哪个子目录,然后发送实际数据。
发送实际数据不是问题,但是如何发送 Windows 相对路径到 Linux 系统?我尝试将其作为字符串使用os.path
,但很快就变得一团糟。我正在考虑使用pathlib
.
如果我可以创建某种路径对象,我可以使用 pickle 来序列化它,并将其发送到服务器。我将使用 pathlib 中的什么对象来表示路径?
Path()
似乎创建了一个适用于当前文件系统(PosixPath
或WindowsPath
)的类的实例,这些文件系统不可移植。如果我WindowsPath
在 Windows 客户端上创建一个对象,Linux 将无法反序列化它,因为您甚至无法WindowsPath
在 Linux 系统上实例化一个对象。
看起来我可以使用一个PureWindowsPath
对象,然后将其发送到 Linux,但是如何将PureWindowsPath
对象(表示相对路径)转换为 aPosixPath
或至少 a PurePosixPath
?
那可能吗?还是我想的全错了?
我在这里使用 Google 的 python 快速启动脚本:https ://developers.google.com/calendar/quickstart/python
在正常情况下效果很好。我可以允许它访问我的 Gmail 帐户,并且它可以创建 Google 日历条目。
但是,如果我在浏览器中登录我的 Gmail 帐户,转到安全性,并撤销我的应用程序对我的 Google 帐户的访问权限,则快速启动脚本不会识别它。它只是崩溃了:
$ python quickstart.py
Getting the upcoming 10 events
Traceback (most recent call last):
File "quickstart.py", line 52, in <module>
main()
File "quickstart.py", line 42, in main
orderBy='startTime').execute()
File "/opt/my_project/venv3/lib/python3.6/site-packages/googleapiclient/_helpers.py", line 130, in positional_wrapper
return wrapped(*args, **kwargs)
File "/opt/my_project/venv3/lib/python3.6/site-packages/googleapiclient/http.py", line 851, in execute
method=str(self.method), body=self.body, headers=self.headers)
File "/opt/my_project/venv3/lib/python3.6/site-packages/googleapiclient/http.py", line 165, in _retry_request
resp, content = http.request(uri, method, *args, **kwargs)
File "/opt/my_project/venv3/lib/python3.6/site-packages/google_auth_httplib2.py", line 213, in …
Run Code Online (Sandbox Code Playgroud) 我正在使用 Django 2.2.10。
我有一个名为 的模型Site
,还有一个名为 的模型Record
。每条记录都与一个站点(外键)相关联。
我的应用程序运行几天/几周/几个月后,每个站点都可以有数千条与之关联的记录。我有效地使用数据库,所以这通常不是问题。
然而,在 Django Admin 中,当我尝试删除站点时,Django Admin 尝试找出也将被删除的每个关联对象,并且因为我的外键使用on_delete=models.CASCADE
,这正是我想要的,所以它尝试生成一个列出数千个的页面,可能有数百万条记录将被删除。有时这会成功,但需要几秒钟。有时浏览器会放弃等待。
record
我怎样才能让 Django Admin 不列出它打算删除的每一个?也许只是说“将删除 x 条记录”之类的内容。
更新:我应该覆盖 Django admin 的 delete_confirmation.html 吗?看起来罪魁祸首可能是这一行:
<ul>{{ deleted_objects|unordered_list }}</ul>
Run Code Online (Sandbox Code Playgroud)
或者是否有一个选项可以启用自动不列出要删除的每个对象,也许如果对象计数超过 X 个对象?
更新2:从delete_confirmation.html 中删除上述行没有帮助。我认为生成deleted_objects 变量的视图花费的时间太长。不太确定如何覆盖 Django 管理视图
忽略我unwrap
用来忽略文件不存在时会发生什么的事实,在我看来,这段简短的代码应该可以工作(只要文件确实存在):
use std::fs::File;
use std::io::Write;
fn main() {
let mut f = File::open("test.txt").unwrap();
let result = f.write_all(b"some data");
match result {
Ok(_) => println!("Data written successfully"),
Err(e) => panic!("Failed to write data: {}", {e}),
}
}
Run Code Online (Sandbox Code Playgroud)
相反,我得到了这个:
thread 'main' panicked at 'Failed to write data: Bad file descriptor (os error 9)', src/main.rs:10:19
Run Code Online (Sandbox Code Playgroud)
需要明确的是,我知道如果我按照在线的众多示例之一进行操作,我可以写入文件。问题不是“我如何写入文件?”。这就是为什么这不起作用。
这与这个问题非常相似,但不幸的是,我仍然无法让它工作。
我有一个模型,其属性组合了几个字段:
class Specimen(models.Model):
lab_number = ...
patient_name = ...
specimen_type = ...
@property
def specimen_name(self):
return f"{self.lab_number}_{self.patient_name}_{self.specimen_type}"
Run Code Online (Sandbox Code Playgroud)
在 Django Admin 中,当有人进行搜索时,我可以使用search_fields
Model Admin 中的属性来指定真实字段,但不能指定specimen_name
自定义字段:
def specimen_name(inst):
return inst.specimen_name
specimen_name.short_description = "Specimen Name"
class SpecimenModelAdmin(admin.ModelAdmin):
list_display = ('specimen_name', 'patient_name', 'lab_number', 'specimen_type')
search_fields = ('patient_name', 'lab_number', 'specimen_type')
Run Code Online (Sandbox Code Playgroud)
使用上面的代码进行搜索,它将搜索各个字段,但如果我尝试在 Django Admin 中搜索完整的标本名称,它不会找到它,因为没有一个字段包含准确的完整标本名称。
我上面链接的 SO 问题为我指明了正确的方向 - 使用get_search_results
. 我的代码现在看起来像这样:
class SpecimenModelAdmin(admin.ModelAdmin):
...
search_fields = ('patient_name', 'lab_number', 'specimen_type')
def get_search_results(self, request, queryset, search_term):
if not search_term:
return …
Run Code Online (Sandbox Code Playgroud) 我有一个 Python Flask 应用程序,需要使用 cython 进行编译。按照本指南,我可以编译一个简单的 python 应用程序,但是当我对一个简单的 Flask 应用程序执行相同的操作时:
#!/usr/bin/env python2
from flask import Flask
app = Flask(__name__)
@app.route("/")
def index():
return "hello"
if __name__ == "__main__":
app.run(host='0.0.0.0', port=8000)
Run Code Online (Sandbox Code Playgroud)
它似乎编译得很好,但是当我尝试运行它时,我得到了这个:
Traceback (most recent call last):
File "./run.py", line 3, in <module>
from app import main
ImportError: cannot import name main
Run Code Online (Sandbox Code Playgroud)
当我尝试运行 main.py 时。
我的compile.py看起来像这样:
#!/usr/bin/env python2
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [
Extension("app", ["app.py"]),
]
setup(
name = …
Run Code Online (Sandbox Code Playgroud) 如果我的 Python 项目的 Dockerfile 如下所示:
FROM python:3.7
# Set env variables
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
# Set work dir
WORKDIR /code
# Install rust
# Needed by cryptography package
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y
# Install dependencies from apt repo
RUN apt-get update && \
apt-get install -y \
build-essential \
python-dev && \
rm -rf /var/lib/apt/lists/*
# Copy and install requirements
COPY requirements.txt /code/requirements.txt
RUN pip install --no-cache --upgrade pip && \ …
Run Code Online (Sandbox Code Playgroud) 如果我有一个像这样的Python模块:
from abc import ABC, abstractmethod
class AbstractClass(ABC):
@abstractmethod
def method(self):
pass
class ConcreteClass1(AbstractClass):
def method(self):
print("hello")
class ConcreteClass2(AbstractClass):
def method(self):
print("hello")
class ConcreteClass3(AbstractClass):
def method(self):
print("hello")
classes = [
ConcreteClass1,
ConcreteClass2,
ConcreteClass3,
]
for c in classes:
c().method()
Run Code Online (Sandbox Code Playgroud)
我用 击中它mypy test.py
,我得到了这个:
test.py:27: error: Cannot instantiate abstract class "AbstractClass" with abstract attribute "method"
Run Code Online (Sandbox Code Playgroud)
虽然代码运行没有任何问题,但我在逻辑上看不到任何问题。我在任何时候都不会尝试实例化AbstractClass
直接实例化。
我注意到一些奇怪的行为:
如果我这样做而不是循环:
...
ConcreteClass1().method()
ConcreteClass2().method()
ConcreteClass3().method()
Run Code Online (Sandbox Code Playgroud)
米比很高兴。
另外,如果我不在循环中使用 3 个类,而是执行 2 个类:
classes = [
ConcreteClass1,
ConcreteClass2,
#ConcreteClass3,
]
for c in …
Run Code Online (Sandbox Code Playgroud) python ×8
django ×3
python-3.x ×3
bash ×1
cython ×1
docker ×1
flask ×1
google-api ×1
google-oauth ×1
mypy ×1
mysql ×1
oauth ×1
oauth-2.0 ×1
pathlib ×1
python-venv ×1
rust ×1