全新安装到 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)
尽管我看到这个文件夹中没有任何文件夹include或lib子文件夹,但我仍然尝试这样做:
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> …
如文档中所述,自 4.1 以来,模板加载的默认行为发生了巨大变化。
如果我理解正确的话,在 4.0 之前它的工作原理是这样的:
这样,模板缓存就可以在生产中无缝启用,这非常棒。
现在,此票证提案已包含在内,如果我正确理解,则必须指定模板加载方法,并且它不再与 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作为第一个可疑的罪魁祸首等......所以我认为这个问题可能对处于类似情况的其他人有用。
我正在尝试执行此操作:\nqueryset.filter(m2m_lated_lookup__through_table_field=value)
\n\n这些是简化的模型:
\n\nclass 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)\nRun 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”,因为 …