- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 NixOS 的新手,所以请原谅我的无知。我只是想设置一个 Python 环境——任何类型的环境——用于使用 SpaCy、SpaCy 数据、pandas 和 jenks-natural-breaks 进行开发。到目前为止,这是我尝试过的:
pypi2nix -V "3.6" -E gcc -E libffi -e spacy -e pandas -e numpy --default-overrides
, 其次是 nix-build -r requirements.nix -A packages
.我设法让第一个命令起作用,但第二个命令失败了 Could not find a version that satisfies the requirement python-dateutil>=2.5.0 (from pandas==0.23.4)
正在编写一个如下所示的 default.nix:with import <nixpkgs> {};
.这失败了
python36.withPackages (ps: with ps; [ spacy pandas scikitlearn ])collision between /nix/store/9szpqlby9kvgif3mfm7fsw4y119an2kb-python3.6-msgpack-0.5.6/lib/python3.6/site-packages/msgpack/_packer.cpython-36m-x86_64-linux-gnu.so and /nix/store/d08bgskfbrp6dh70h3agv16s212zdn6w-python3.6-msgpack-python-0.5.6/lib/python3.6/site-packages/msgpack/_packer.cpython-36m-x86_64-linux-gnu.so
pip install
在所有这些包上。 Scikit-learn 安装失败,fish: Unknown command 'ar rc build/temp.linux-x86_64-3.6/liblibsvm-skl.a build/temp.linux-x86_64-3.6/sklearn/svm/src/libsvm/libsvm_template.o'
我想理想情况下我想用 nix 安装这个环境,这样我就可以用 nix-shell 进入它,这样其他环境就可以重用相同的 python 包。我该怎么做呢?特别是因为其中一些包存在于 nixpkgs 中,而其他包仅存在于 Pypi 上。
最佳答案
我遇到了 jenks-natural-breaks 的问题调到
nix-shell ❯ poetry run python -c 'import jenks_natural_breaks'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/matt/2022/12/28-2/.venv/lib/python3.10/site-packages/jenks_natural_breaks/__init__.py", line 5, in <module>
from ._jenks_matrices import ffi as _ffi
ModuleNotFoundError: No module named 'jenks_natural_breaks._jenks_matrices'
所以我要使用 jenkspy这似乎有点活泼。如果这不能解决您的问题,我会联系 jenks-natural-breaks
的维护者指导
你说:
so other environments could reuse the same python packages
这让我觉得 flake.nix
是你需要的。 flakes 的妙处在于您可以定义一个具有 spacy
的环境。 , pandas
, 和 jenkspy
用一片。然后你(或其他人)可能会说:
I want an env like Jonathan's, except I also want
sympy
与其复制您的环境并进行调整,他们可以将您的环境声明为构建输入并编写 flake.nix
与他们的修改 - 可以由其他人进一步修改。
人们可以想象一种环境家族树,因此您只需选择适合您任务的环境即可。 Python 社区尚未就此愿景达成共识。
当您只需要一个环境时,Poetry 会像您尝试发布一个库一样对待您,但是库的依赖项几乎就是一个环境,因此拥有一个空包并仅使用 poetry 作为环境并没有错工厂。
奖励:如果您最终决定发布一个库,那么您就准备好了。
nix flakes 从 git repo 的角度思考,所以我们从一个开始:
$ git init
然后创建一个名为 flake.nix
的文件.通常我最终会用诗歌处理 90% 的 python 内容,但两者都是 pandas
和 spacy
在那 10% 中有链接到系统库的依赖项。所以我们要求 nix 安装它们,以便当 poetry 尝试将它们安装在 nix develop
中时。 shell,它有它需要的东西。
{
description = "Jonathan's awesome env";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs";
};
outputs = { self, nixpkgs, flake-utils }: (flake-utils.lib.eachSystem [
"x86_64-linux"
"x86_64-darwin"
"aarch64-linux"
"aarch64-darwin"
] (system:
let
pkgs = nixpkgs.legacyPackages.${system};
in
rec {
packages.jonathansenv = pkgs.poetry2nix.mkPoetryApplication {
projectDir = ./.;
};
defaultPackage = packages.jonathansenv;
devShell = pkgs.mkShell {
buildInputs = [
pkgs.poetry
pkgs.python310Packages.pandas
pkgs.python310Packages.spacy
];
};
}));
}
现在我们让 git 知道 flake 并进入环境:
❯ git add flake.nix
❯ nix develop
$
然后我们初始化诗歌项目。我发现由 nix 安装的 poetry 对于它默认使用的 python 有点奇怪,所以我们将明确设置它
$ poetry init # follow prompts
$ poetry env use $(which python)
$ poetry run python --version
Python 3.10.9 # declared in the flake.nix
此时,我们应该有一个 pyproject.toml
:
[tool.poetry]
name = "jonathansenv"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
[tool.poetry.dependencies]
python = "^3.10"
jenkspy = "^0.3.2"
spacy = "^3.4.4"
pandas = "^1.5.2"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
现在我们创建 poetry 将使用的 venv,并运行依赖于这些的命令。
$ poetry install
$ poetry run python -c 'import jenkspy, spacy, pandas'
你也可以让诗歌把你装进一个壳里:
$ poetry shell
(venv)$ python -c 'import jenkspy, spacy, pandas'
虽然这样做有点尴尬,因为我们有两个子 shell 深度,并且我们拥有祖父 shell 的任何 shell 定制都不可用。所以我建议使用 direnv , 每当我导航到该目录时进入 dev shell 然后只使用 poetry run ...
在环境中运行命令。
除了运行 nix develop
与 flake.nix
在您当前的目录中,您还可以执行 nix develop /local/path/to/repo
或 develop nix develop github:/githubuser/githubproject
达到相同的结果。
为了演示 github 示例,我已经推送了上面引用的文件 here .所以你应该能够从任何安装了 nix 的 linux shell 运行它:
❯ nix develop github:/MatrixManAtYrService/nix-flake-pandas-spacy
$ poetry install
$ poetry run python -c 'import jenkspy, spacy, pandas'
我说“应该”是因为如果我在 Mac 上运行该命令它会提示 linux-headers-5.19.16
在 x86_64-darwin
上不受支持.
大概有一种方法可以编写 flake(或修复程序包),这样它就不会坚持在 mac 上构建 linux 的东西,但在我弄清楚之前,恐怕这只是部分答案。
关于python - 在 NixOS 中,如何使用 Python 包 SpaCy、pandas 和 jenks-natural-breaks 安装环境?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52490426/
是否有效率偏好以下控制流选项之一用于循环或切换另一个? 选项 1: switch(...){ case 1: if (...) { ... } else if
我需要在某个地方修复一些 CSS,因为我的文本没有环绕,如果它是一个非常长的单词,它会无限期地继续下去。 在大多数情况下,我在我的 CSS 文件中尝试了 word-wrap: break-word;
这个问题在这里已经有了答案: What is the difference between "word-break: break-all" versus "word-wrap: break-word
我的问题: overflow-wrap: break-word 和 word-break: break-word 有区别吗? 非重复: 这里有一些现有的问题,乍一看可能是重复的,但实际上不是。 Wha
我目前想知道两者之间有什么区别。当我同时使用它们时,如果它不适合容器,它们似乎会打破这个词。但为什么 W3C 做了两种方式来做呢? 最佳答案 word-wrap: break-word 最近更改为 o
满足条件时如何跳出循环? 例如: for (i in 0..10){ if (i==3){ // equivalent of break } } 最佳答案 Q#没有中
CSS3 规范说部分支持 word-wrap:break-word; 在 Chrome 中你必须使用 word-wrap:break-all; 但是没有连字符。我正在使用 text-align:jus
我想在我的 View 列表中显示来自数据库的所有评论。但有时,评论会很长。我试图用 word-wrap:break-word 来“打破”它们,但没有结果——像这样的评论 aaaaaaaaaaaaaaa
我正在尝试将一个长 URL 放置在侧边栏中,以在表格单元格宽度的范围内中断和换行。我已将 style="word-break:break-all;" 添加到 td 和围绕文本和 URL 的 span
我有以下代码: public void post(String message) { final String mess = message; (new Thread() {
是否有 word-break: break-word 的 alternative 可以在 firefox 中使用? 在 firefox[版本 57.0] 中 在 Chrome [版本 62.0.320
在this question以及this blog ,其中提到了样式 word-break 及其值。此外,还有值 break-word 作为属于例如的东西。 自动换行类。 在最近的 VS 中 MVC
我正在尝试将文本包装在 td 中并使用以下样式 word-break:break-all 在 IE 中工作得很好,但在 Firefox 中失败,请注意这是不支持的!尝试了 http://petesbl
我正在使用“word-break: break-all”在任何字符之间插入分隔符。 但是,在 Chrome 中,它无法正常处理特定字符(例如冒号、分号、逗号),如下所示。 (我的代码笔在这里:http
它只有在我用不同的元素包裹 anchor 标记时才有效,但我正在阅读 html,所以我想将它添加为整个页面的样式。 最佳答案 我不确定你想在这里实现什么,如果你能分享一些代码片段会很好。 无论如何,我
这些看起来都是一样的,有什么区别? https://jsfiddle.net/pmuub8w1/2/ p{ word-break:normal; } p{
目前下面的代码,保持div宽度固定,换行由于break-all .Test{ float: left; margin-bottom: 2px; word-wrap:break-word; word-b
我正在使用 word-break: break-all; 并想知道如何让浏览器自动插入 hyphens ,如 MDN example 中所示. div { width: 80px; heigh
我的 html 有这种结构: content1 content2 content3 content4 content5 content6 co
我正在尝试对齐图像旁边的文本。我想考虑没有空格的长字符串。 我的css如下 .new_item { width: 100%; float: left; border-bottom: 1px solid
我是一名优秀的程序员,十分优秀!