小编Per*_*ell的帖子

Ubuntu 22.04 中的 Pyenv:错误:Python ssl 扩展未编译。缺少 OpenSSL 库?

全新安装到 Ubuntu 22(我在另一个分区中有 Ubuntu 20),最后一个部分我需要使用它来使 pyenv 正常运行。

当尝试pyenv install x.xx.x失败时,出现以下错误: ERROR: The Python ssl extension was not compiled. Missing the OpenSSL lib?

我“尝试尝试”官方文档的建议

我说“尝试”是因为我不明白我必须做什么。他们发出以下命令:

CPPFLAGS="-I<openssl install prefix>/include" \
LDFLAGS="-L<openssl install prefix>/lib" \
pyenv install -v <python version>
Run Code Online (Sandbox Code Playgroud)

但我不知道“openssl install prefix”是什么意思。我认为这是 openssl 安装目录,所以我这样做了:

openssl version -d
OPENSSLDIR: "/home/linuxbrew/.linuxbrew/etc/openssl@1.1"
Run Code Online (Sandbox Code Playgroud)

尽管我看到这个文件夹中没有任何文件夹includelib子文件夹,但我仍然尝试这样做:

CPPFLAGS="-I/home/linuxbrew/.linuxbrew/etc/openssl@1.1/include" \
LDFLAGS="-L/home/linuxbrew/.linuxbrew/etc/openssl@1.1/lib" \
pyenv install -v 3.10.0
Run Code Online (Sandbox Code Playgroud)

最终出现相同的错误消息。

不得不说,我尝试了很多在其他地方找到的其他东西,但没有任何效果,但为了简单起见,我坚持使用官方指示。

如果您遇到同样的问题并且解决方案来自这些命令之外的其他地方,请分享!

非常感谢 :)

更新

<openssl install prefix>只是指基本路径或基本文件夹,只是 Homebrew 决定发明一个新名称,因为......好吧,我猜是一些非常重要的原因。

这部分只需替换为即可<openssl install prefix> …

python openssl pyenv ubuntu-22.04

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

从 django 4.1 开始,模板通过 DEBUG=True 进行缓存。这个解决方案正确吗?

如文档中所述,自 4.1 以来,模板加载的默认行为发生了巨大变化。

如果我理解正确的话,在 4.0 之前它的工作原理是这样的:

  • 启用 DEBUG 后,模板会在每个请求中加载,因此,如果您在处理模板时不断进行更改并重新加载,您始终会看到最新版本。
  • 禁用 DEBUG 后,初始化应用程序时会缓存模板,因此只有重新启动应用程序时才能看到模板中的更改。

这样,模板缓存就可以在生产中无缝启用,这非常棒。

现在,此票证提案已包含在内,如果我正确理解,则必须指定模板加载方法,并且它不再与 DEBUG 设置相关联,并且默认情况下会被缓存。

我们希望保持原始行为,以便前端开发人员无需重新启动应用程序即可看到更改,并且我们还希望生产部署启用缓存,因此我们这样做了:

develop_loaders = [
    "django.template.loaders.filesystem.Loader",
    "django.template.loaders.app_directories.Loader",
]
production_loaders = [
    ("django.template.loaders.cached.Loader", [
        "django.template.loaders.filesystem.Loader",
        "django.template.loaders.app_directories.Loader",
        "path.to.custom.Loader",
    ])
]
TEMPLATES = [
    {
        "BACKEND": "django.template.backends.django.DjangoTemplates",
        "DIRS": [
            "templates",
        ],
        "OPTIONS": {
            "context_processors": [
                "maintenance_mode.context_processors.maintenance_mode",
                "django.template.context_processors.debug",
                "django.template.context_processors.request",
                "django.contrib.auth.context_processors.auth",
                "django.contrib.messages.context_processors.messages",
                "wagtail.contrib.settings.context_processors.settings",
            ],
            "loaders": develop_loaders if DEBUG else production_loaders,
        },
    },
]
Run Code Online (Sandbox Code Playgroud)

哪个有效,但我想知道我是否正确理解了情况?您认为这是一个可靠的解决方案吗?

我也花了一段时间,因为当我阅读 4.1 的变更日志时,我没有意识到这个变化会产生这种影响(我们之前从未在设置中指定过任何加载器),所以我们期望默认行为得到尊重,这导致了寻找在gunicorn和docker作为第一个可疑的罪魁祸首等......所以我认为这个问题可能对处于类似情况的其他人有用。

django django-templates django-cache

7
推荐指数
1
解决办法
896
查看次数

通过m2m关系的直通表的值过滤django查询集

我正在尝试执行此操作:\nqueryset.filter(m2m_lated_lookup__through_table_field=value)

\n\n

这些是简化的模型:

\n\n
class User(models.Model):\n    name = models.CharField("nom", max_length=100)\n    surname = models.CharField("cognoms", max_length=100)\n\nclass Activity(models.Model):\n    name = models.CharField("T\xc3\xadtol", max_length=200)\n    date_start = models.DateField("Dia inici")\n    date_end = models.DateField("Dia finalitzaci\xc3\xb3")\n    enrolled = models.ManyToManyField(User, related_name=\'enrolled_activities\', through=\'ActivityEnrolled\')\n\nclass ActivityEnrolled(models.Model):\n    class Meta:\n        db_table = \'main_activity_personetes_enrolled\'\n\n    activity = models.ForeignKey(Activity, on_delete=models.CASCADE)\n    user = models.ForeignKey(Personeta, on_delete=models.CASCADE)\n    date_enrolled = models.DateTimeField("data d\'inscripci\xc3\xb3")\n    confirmed = models.BooleanField("confirmada", default=False)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想这很简单,只是一个多2多的自定义直通表,这样我就可以在那里存储注册日期和其他一些东西。\n此关系在“活动”中设置,相关名称为“enrolled_activities”。

\n\n

那么,如何使用 Django 的 ORM 查询“ActivityEnrolled.enrollment_date 在 2019 年的所有用户”?

\n\n

这是用于 Django 管理中的 Change_list 视图的自定义过滤器(使用 admin.SimpleListFilter),该视图列出了用户项目。换句话说,就像我正在做 User.objects.filter(blabla) 一样。

\n\n

尝试: queryset.filter(enrolled_activities__date_enrolled__year=2019) 显然会抛出错误“相关字段获取无效查找:date_enrolled”,因为 …

python django many-to-many django-queryset django-filter

4
推荐指数
1
解决办法
2875
查看次数