标签: python-3.9

ModuleNotFoundError:没有名为“qrcode”的模块 python 3.9

我已经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)

python pycharm python-3.9

6
推荐指数
2
解决办法
2万
查看次数

Python 3.9 和 Pycharm、HTMLParser AttributeError

尝试在 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)

可以用它做什么?

python pycharm python-3.9

5
推荐指数
2
解决办法
2898
查看次数

如何在异步单元测试中模拟方法?

我有一个名为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)

python pytest fastapi python-3.9

5
推荐指数
1
解决办法
6341
查看次数

Django MSSQL:覆盖外键约束名称生成

我正在尝试使用 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/迁移的同时在模型中拥有外键?

python sql-server django python-3.9 django-mssql-backend

5
推荐指数
1
解决办法
578
查看次数

类型提示:检查类型是否兼容

我使用类型注释来进行一些基本的类型检查和自动类型转换。

作为其中的一部分,我希望检查给定类型是否应可分配给数据类的某些字段,即该类型是否与我的数据类上的类型注释“兼容”。

是否有任何开箱即用的方法来检查给定类型是否可分配给其他类型?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版本中添加了新的东西)。

python python-3.9

5
推荐指数
1
解决办法
615
查看次数

带括号的上下文管理器在 python 3.9 中有效,但在 3.8 中无效

所以我有一个简单的声明示例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 中工作。我找不到相关的变更日志。

python with-statement contextmanager python-3.x python-3.9

5
推荐指数
1
解决办法
1068
查看次数

如何正确键入提示类装饰器?

假设我们有一些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真的不喜欢,引发错误: …

type-hinting mypy python-typing python-3.9 python-3.10

5
推荐指数
1
解决办法
1405
查看次数

如何控制plpython3使用哪个Python版本?

我有一个在 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)

plpython python-3.9

5
推荐指数
1
解决办法
1373
查看次数

为什么 python 集合按升序“排序”?

让我们运行以下代码:

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 set unordered python-3.x python-3.9

5
推荐指数
1
解决办法
2185
查看次数

ImportError:无法从“pandas.io.json”导入名称“json_normalize”

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 pandas python-3.9

5
推荐指数
1
解决办法
1万
查看次数