7 Jan 2022 |
| elgert joined the room. | 04:04:09 |
10 Jan 2022 |
| manveru joined the room. | 13:50:03 |
11 Jan 2022 |
| zrsk joined the room. | 19:15:53 |
zrsk | Hi, I'm trying to understand how to use poetry2nix but I've this poroblem, this is my current flake.nix :
{
description = "My Python application";
inputs = {
nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable;
flake-utils-plus.url = github:gytis-ivaskevicius/flake-utils-plus/v1.3.1;
};
outputs = { self, nixpkgs, flake-utils-plus }:
flake-utils-plus.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
caseGeneratorApp = pkgs.poetry2nix.mkPoetryEnv {
projectDir = ./case;
editablePackageSources = {
src = ./case/src;
};
};
packageName = "case_generator";
in
{
defaultPackage = caseGeneratorApp;
devShell = pkgs.mkShell {
name = "development";
buildInputs = [
caseGeneratorApp
];
};
});
}
When I enter in the development shell withnix develop I get the scripts exposed by poetry and configured in the pyproject.toml in my PATH, and I can correctly execute them. But if I edit these sources (in ./case/src/ ) it makes no difference. I've to exit and re-enter in the shell to make the changes work.
Am I doing things correctly? If someone know a simple and working flake using poetry2nix I would be happy to take a look.
Thank you
| 23:48:04 |
adisbladis | In reply to @aciceri:nixos.dev
Hi, I'm trying to understand how to use poetry2nix but I've this poroblem, this is my current flake.nix :
{
description = "My Python application";
inputs = {
nixpkgs.url = github:NixOS/nixpkgs/nixos-unstable;
flake-utils-plus.url = github:gytis-ivaskevicius/flake-utils-plus/v1.3.1;
};
outputs = { self, nixpkgs, flake-utils-plus }:
flake-utils-plus.lib.eachDefaultSystem (system:
let
pkgs = nixpkgs.legacyPackages.${system};
caseGeneratorApp = pkgs.poetry2nix.mkPoetryEnv {
projectDir = ./case;
editablePackageSources = {
src = ./case/src;
};
};
packageName = "case_generator";
in
{
defaultPackage = caseGeneratorApp;
devShell = pkgs.mkShell {
name = "development";
buildInputs = [
caseGeneratorApp
];
};
});
}
When I enter in the development shell withnix develop I get the scripts exposed by poetry and configured in the pyproject.toml in my PATH, and I can correctly execute them. But if I edit these sources (in ./case/src/ ) it makes no difference. I've to exit and re-enter in the shell to make the changes work.
Am I doing things correctly? If someone know a simple and working flake using poetry2nix I would be happy to take a look.
Thank you
That's because of how flakes work re purity. In a flake evaluation ./foo doesn't refer to the local path, but the path copied to the store. | 23:52:29 |
adisbladis | It's not a poetry2nix thing, it's a flakes thing. | 23:52:40 |
12 Jan 2022 |
zrsk | Ahh, I understand. What do you suggest me then? What would be the correct way to use a flake to manage a development flow like this? | 00:02:20 |
adisbladis | In reply to @aciceri:nixos.dev Ahh, I understand. What do you suggest me then? What would be the correct way to use a flake to manage a development flow like this? I've seen people using --impure combined with environment variables to reference paths outside of the store. That could work.
I'm not a flakes user so I might not be of too much help.
| 00:03:47 |
zrsk | Thank you for the hint, I'll try. Do you know any project using flake and poetry2nix as reference? | 00:31:16 |
averagechris | zrsk: I have been packaging a few python apps as nix flakes. I'm no expert, but what's worked for me with editable installs is mkPoetryEnv as devShell instead of mkShell with the env as an input | 00:33:43 |
averagechris | here is a copy paste of an example from one of the apps I packaged last week
devShell = (pkgs.poetry2nix.mkPoetryEnv {
projectDir = ./.;
editablePackageSources.YOUR_APP = ./YOUR_SRC_DIR;
}).env.overrideAttrs (old: {
propagatedNativeBuildInputs = (old.propagatedNativeBuildInputs or [ ]) ++ nativeDependencies;
shellHook = (old.shellHook or "") + ''
export GDAL_LIBRARY_PATH="${pkgs.gdal}/lib/libgdal.so"
export GEOS_LIBRARY_PATH="${pkgs.geos}/lib/libgeos_c.so"
'';
buildInputs = extraDevDependencies;
});
| 00:36:11 |
zrsk | averagechris: thank you! I'll definitely try this approach, I don't like the idea to use --impure | 00:39:17 |
averagechris | Good luck and let us know if you learn anything interesting :) | 00:39:47 |
adisbladis | In reply to @averagechris:matrix.org zrsk: I have been packaging a few python apps as nix flakes. I'm no expert, but what's worked for me with editable installs is mkPoetryEnv as devShell instead of mkShell with the env as an input I don't understand how that would work, but if it does I'm very interested in knowing more... | 00:42:56 |
averagechris | I'm using lorri that might be it? | 00:44:26 |
averagechris | so maybe I'm just slow enough so that it reevaluates everything | 00:44:47 |
adisbladis | Lorri doesn't have flakes support afaik? | 00:45:39 |
averagechris | you have to make a compatible shell.nix | 00:46:03 |
adisbladis | Right, then the evaluation model is different | 00:46:14 |
adisbladis | Flakes enforces hermetic evaluation by copying everything to the store | 00:46:35 |
adisbladis | Which changes the semantics of paths | 00:46:49 |
averagechris | ah right and so when lorri invokes the shell.nix those semantics are not in place | 00:47:23 |
averagechris | zrsk: that's important context ^ | 00:47:33 |
adisbladis | Exactamundo | 00:47:34 |
averagechris | Totally makes sense I didn't even think about that. | 00:47:54 |
| averagechris set a profile picture. | 03:00:47 |
| Jairo Llopis joined the room. | 11:53:46 |
Jairo Llopis | hello folks, I'm trying to use poetry2nix (total noob in nix, sorry) with a new project I'm developing.
it's weird that I can run this without problems:
> nix develop -c python -c 'import plumbum; print(plumbum.__file__)'
warning: Git tree '/var/home/yajo/prodevel/automirror' is dirty
/nix/store/5vnfif1w37raxbaxqn5qvpc9caqdgrkf-python3-3.9.6-env/lib/python3.9/site-packages/plumbum/__init__.py
however, when I attempt to build it, it fails:
> nix build
warning: Git tree '/var/home/yajo/prodevel/automirror' is dirty
error: --- Error -------------------------------------------------------------------------------------------------------------------------------------------------------------- nix
builder for '/nix/store/6s1kmxzh0nm65hj0zb18f1hs913szy0q-python3.9-automirror-0.0.0.drv' failed with exit code 1; last 10 log lines:
Removed build tracker: '/build/pip-req-tracker-3skg7iy7'
Finished creating a wheel...
Finished executing pipBuildPhase
installing
Executing pipInstallPhase
/build/source/dist /build/source
Processing ./automirror-0.0.0-py3-none-any.whl
Requirement already satisfied: git-aggregator<3.0.0,>=2.1.0 in /nix/store/nv8c0dhjcqxdrr08wgp25al6qfiqs5kk-python3.9-git-aggregator-2.1.0/lib/python3.9/site-packages (from automirror==0.0.0) (2.1.0)
ERROR: Could not find a version that satisfies the requirement plumbum<2.0.0,>=1.7.2 (from automirror) (from versions: none)
ERROR: No matching distribution found for plumbum<2.0.0,>=1.7.2
of course, plumbum is in my dependencies, added with poetry add plumbum just like normal; actually there's another dependency and that one gives no problems
| 11:57:58 |
Jairo Llopis | nix shell and nix run fail with the same error as nix build ; of course I can just use nix develop for everything, but it doesn't seem extremely nice to me when not actually developing | 12:00:18 |
Jairo Llopis | any idea on how to fix it? | 12:02:29 |