我已经qrcode
在命令提示符中安装了库,并且还更新了我的命令提示符。在命令提示符中,它说一切都很好,但是当我转到 PyCharm 并输入:
import qrcode
img = qrcode.make("This is the qrcode")
img.save("myqrcode.png")
Run Code Online (Sandbox Code Playgroud)
当我运行它时,它说:
Traceback (most recent call last):
File "C:\Users\Antho\PycharmProjects\pythonProject\main.py", line 1, in <module>
import qrcode
ModuleNotFoundError: No module named 'qrcode'
Run Code Online (Sandbox Code Playgroud) 尝试在 Pycharm 中创建新的 python 3.9 Virtualenv 环境时,我收到了这样的错误
AttributeError: 'HTMLParser' object has no attribute 'unescape'
Traceback (most recent call last):
File "/var/folders/6g/vnvmvlf51gv49m22rzj9zdtw0000gn/T/tmpifdsjw6lpycharm-management/setuptools-40.8.0/setup.py", line 11, in <module>
import setuptools
File "/private/var/folders/6g/vnvmvlf51gv49m22rzj9zdtw0000gn/T/tmpifdsjw6lpycharm-management/setuptools-40.8.0/setuptools/__init__.py", line 20, in <module>
from setuptools.dist import Distribution, Feature
File "/private/var/folders/6g/vnvmvlf51gv49m22rzj9zdtw0000gn/T/tmpifdsjw6lpycharm-management/setuptools-40.8.0/setuptools/dist.py", line 35, in <module>
from setuptools.depends import Require
File "/private/var/folders/6g/vnvmvlf51gv49m22rzj9zdtw0000gn/T/tmpifdsjw6lpycharm-management/setuptools-40.8.0/setuptools/depends.py", line 7, in <module>
from .py33compat import Bytecode
File "/private/var/folders/6g/vnvmvlf51gv49m22rzj9zdtw0000gn/T/tmpifdsjw6lpycharm-management/setuptools-40.8.0/setuptools/py33compat.py", line 55, in <module>
unescape = getattr(html, 'unescape', html_parser.HTMLParser().unescape)
AttributeError: 'HTMLParser' object has no attribute 'unescape'
Run Code Online (Sandbox Code Playgroud)
可以用它做什么?
我有一个名为database.py 的类,其中包含一个名为generate_token() 的函数。我想模拟它并返回一个固定值321
。这样我就可以看到该方法被调用并返回了返回值。
我该如何嘲笑呢?这是我尝试过的。
@pytest.mark.asyncio
async def test_successful_register_returns_device_token(monkeypatch):
async def mock_generate_token():
return "321"
m = AsyncMock(mock_generate_token)
m.return_value = "321"
async with AsyncClient(app=app, base_url="http://127.0.0.1") as ac:
monkeypatch.setattr(database, "generate_token", m)
response = await ac.post(
"/register/",
headers={},
json={},
)
assert response.status_code == 201
assert "device_token" in response.json()
assert response.json()["device_token"] == "321"
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 django-mssql-backend 在 Django 3.0 中创建一个数据库模型,作为 SQL Server 2019 的数据库后端。该数据库对其中包含的表使用多个架构,其中一些表是非托管的(已经存在) ,以及通过迁移从头开始创建的其他内容。为了使多个模式正常工作,我使用了在此处的另一个答案中找到的技巧,建议按如下方式格式化表名:
class MyModel(models.Model):
...
class Meta:
db_table = 'schema].[table'
Run Code Online (Sandbox Code Playgroud)
这样 SQL 就可以编译为在外部自动形成的方括号中完成架构/表定义。这样做的问题是,ForeignKey 对象使用此表名称生成其约束名称,这会导致出现无效的约束名称,从而导致在创建表完成后迁移失败,并且需要创建约束。\
它们生成如下:
[schema1].[table1_colname_id_bc165567_fk2_schema2].[table_colname]
有没有办法覆盖这种行为?如果可以通过分叉后端并添加手动编译代码来覆盖这一点,我将如何去做呢?否则,如何在使用多个模式并充分利用 Django 附带的 ORM/迁移的同时在模型中拥有外键?
我使用类型注释来进行一些基本的类型检查和自动类型转换。
作为其中的一部分,我希望检查给定类型是否应可分配给数据类的某些字段,即该类型是否与我的数据类上的类型注释“兼容”。
是否有任何开箱即用的方法来检查给定类型是否可分配给其他类型?IE
from typing import Optional, Union, Annotated, Type
def is_assignable(from_what: Type, to_what: Type) -> bool:
// .. how?
is_assignable(int, int) // should be true
is_assignable(int, Optional[int]) should be true
is_assignable(int, Annotated[Union[str, Optional[int]], "hello world"]) // should be true
is_assignable(float, Annotated[Union[str, Optional[int]], "hello world"]) // False. Can't assign float to Annotated[Union[str, Optional[int]], "hello world"])
Run Code Online (Sandbox Code Playgroud)
我可以尝试自己解开所有的typing.*逻辑,即解开Optional、Union、Annotated等等,但这感觉相当难看(而且不太可维护,如果在最近的python版本中添加了新的东西)。
所以我有一个简单的声明示例with
。它适用于 Python 3.8 和 3.9:
class Foo:
def __enter__(self, *args):
print("enter")
def __exit__(self, *args):
print("exit")
with Foo() as f, Foo() as b:
print("Foo")
Run Code Online (Sandbox Code Playgroud)
输出(如预期):
enter
enter
Foo
exit
exit
Run Code Online (Sandbox Code Playgroud)
但如果我像这样添加括号,它只适用于 Python 3.9:
class Foo:
def __enter__(self, *args):
print("enter")
def __exit__(self, *args):
print("exit")
with (Foo() as f, Foo() as b):
print("Foo")
Run Code Online (Sandbox Code Playgroud)
3.8 中的输出:
File "foo.py", line 8
with (Foo() as f, Foo() as b):
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
我知道,我可以删除括号,但我不明白为什么它首先在 Python 3.9 中工作。我找不到相关的变更日志。
假设我们有一些func
将类的实例映射A
到类的实例的函数B
,即它具有签名Callable[[A], B]
。
我想autofunc
为子类编写一个类装饰器,在创建实例时A
自动应用于实例。func
例如,考虑基于全局环境变量的自动 jit 编译。这可以通过以下方式完成
from functools import wraps
def autofunc(basecls):
@wraps(basecls, updated=())
class WrappedClass(basecls):
def __new__(cls, *args, **kwargs):
instance = basecls(*args, **kwargs)
return func(instance)
return WrappedClass
Run Code Online (Sandbox Code Playgroud)
那么下面两条大致等价:
class C(A): ... instance = func(C()) |
@autofunc class C(A): ... instance = C() |
---|
出于我的天真,我尝试过
def autofunc(basecls: type[A]) -> type[B]:
@wraps(basecls, updated=())
class WrappedClass(basecls):
def __new__(cls, *args, **kwargs):
instance = basecls(*args, **kwargs)
return func(instance)
return WrappedClass
Run Code Online (Sandbox Code Playgroud)
这mypy
真的不喜欢,引发错误: …
我有一个在 CentOS 7 上运行的 postgres 11 数据库,并尝试使用 PL/python,但需要指向 python 解释器的特定版本。我需要使用python3.9,而它正在使用python3.6。我目前无法卸载 python3.6,因此希望以某种方式将 plpython3 指向我的 python3.9 解释器。
我已经安装了包 postgresql-plpython3:
sudo yum install -y postgresql-plpython3
我在 PG 中创建了一个扩展,可以运行一个简单的 PL/python 函数来报告所使用的版本:
CREATE OR REPLACE FUNCTION pyver ()
RETURNS TEXT
AS $$
import sys
pyversion = sys.version
return pyversion
$$ LANGUAGE 'plpython3u';
Run Code Online (Sandbox Code Playgroud)
执行它会返回:
# select pyver();
pyver
-----------------------------------------
3.6.8 (default, Nov 16 2020, 16:55:22) +
[GCC 4.8.5 20150623 (Red Hat 4.8.5-44)]
(1 row)
Run Code Online (Sandbox Code Playgroud)
在我的操作系统上,我有以下 python 解释器文件及其使用的版本:
$ /usr/bin/python3 --version
Python 3.9.6
$ python3 --version
Python …
Run Code Online (Sandbox Code Playgroud) 让我们运行以下代码:
st = {3, 1, 2}
st
>>> {1, 2, 3}
st.pop()
>>> 1
st.pop()
>>> 2
st.pop()
>>> 3
Run Code Online (Sandbox Code Playgroud)
尽管集合被认为是无序的,但该集合的行为就像按升序排序一样。pop()
根据文档,该方法应该返回“任意元素”,也按升序返回元素。这是什么原因呢?
python 3.9.2-3
pandas 2.0.0
pandas-io 0.0.1
Run Code Online (Sandbox Code Playgroud)
Error:
from pandas.io.json import json_normalize
ImportError: cannot import name 'json_normalize' from 'pandas.io.json' (/home/casaos/.local/lib/python3.9/site-packages/pandas/io/json/__init__.py)
Run Code Online (Sandbox Code Playgroud)
显然,这是 pandas 诞生前 1x 天的早期问题,但似乎又重新出现了。建议?
我正在运行一个以前可以运行的脚本,但将其迁移到新主机。它在线上出错:
from pandas.io.json import json_normalize
Run Code Online (Sandbox Code Playgroud)
并抛出错误
ImportError: cannot import name 'json_normalize' from 'pandas.io.json' (/home/casaos/.local/lib/python3.9/site-packages/pandas/io/json/__init__.py)
Run Code Online (Sandbox Code Playgroud)
我尝试重新安装 pandas(“安装”选项)、删除并重新安装以及“安装 --force-reinstall”,所有这些都以 root 身份执行,以便 python3 的基本安装而不是单个用户安装
python-3.9 ×10
python ×8
pycharm ×2
python-3.x ×2
django ×1
fastapi ×1
mypy ×1
pandas ×1
plpython ×1
pytest ×1
python-3.10 ×1
set ×1
sql-server ×1
type-hinting ×1
unordered ×1