22 Jan 2022 |
K900 | It's that it doesn't even know you're trying to add stuff | 17:21:59 |
K900 | And you're trying to add stuff that has native dependencies | 17:22:11 |
K900 | And those dependencies need to exist in your shell | 17:22:19 |
K900 | Which is managed by Nix, which doesn't know you're trying to add stuff | 17:22:29 |
sephi | The pillow dependency and all the other dependencies you see are already in my environment, I’m just trying to add gunicorn (which doesn’t have pillow as a dependency). I have no idea why poetry is trying to upgrade all these dependencies. | 17:25:41 |
sephi | Ah it seems I can just do poetry add --lock gunicorn to only update the pyproject.toml & poetry.lock files without trying to install anything | 17:37:23 |
| lelit joined the room. | 20:05:15 |
23 Jan 2022 |
mou | i'm a little confused by nix scoping rules and closures. I have this minimal flake file
description = "Application packaged using poetry2nix";
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.nixpkgs.url = "github:NixOS/nixpkgs";
inputs.poetry2nix.url = "github:nix-community/poetry2nix";
outputs = { self, nixpkgs, flake-utils, poetry2nix }:
{
# Nixpkgs overlay providing the application
overlay = nixpkgs.lib.composeManyExtensions [
poetry2nix.overlay
(final: prev: {
# The application
myapp = prev.poetry2nix.mkPoetryApplication {
projectDir = ./.;
};
})
];
} // (flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ self.overlay ];
};
in
{
apps = {
myapp = pkgs.myapp;
};
defaultApp = pkgs.myapp;
devShell = poetry2nix.mkPoetryEnv {
projectDir = ./.;
editablePackageSources = {
emptyproject = ./.;
};
};
}));
}
And it's produce this error:
error: attribute 'mkPoetryEnv' missing
at /nix/store/c0qrx1svg4p1xviy2jsmjsqmz09rbdjx-source/flake.nix:33:20:
32| defaultApp = pkgs.myapp;
33| devShell = poetry2nix.mkPoetryEnv {
| ^
34| projectDir = ./.;
(use '--show-trace' to show detailed location information)
I expect what since poetr2nix is an binding references argument of outputs function, it will be available for evaluation of this function expression.
| 14:07:13 |
mou | * i'm a little confused by nix scoping rules and closures. I have this minimal flake file
description = "Application packaged using poetry2nix";
inputs.flake-utils.url = "github:numtide/flake-utils";
inputs.nixpkgs.url = "github:NixOS/nixpkgs";
inputs.poetry2nix.url = "github:nix-community/poetry2nix";
outputs = { self, nixpkgs, flake-utils, poetry2nix }:
{
# Nixpkgs overlay providing the application
overlay = nixpkgs.lib.composeManyExtensions [
poetry2nix.overlay
(final: prev: {
# The application
myapp = prev.poetry2nix.mkPoetryApplication {
projectDir = ./.;
};
})
];
} // (flake-utils.lib.eachDefaultSystem (system:
let
pkgs = import nixpkgs {
inherit system;
overlays = [ self.overlay ];
};
in
{
apps = {
myapp = pkgs.myapp;
};
defaultApp = pkgs.myapp;
devShell = poetry2nix.mkPoetryEnv {
projectDir = ./.;
editablePackageSources = {
emptyproject = ./.;
};
};
}));
}
And it's produce this error:
error: attribute 'mkPoetryEnv' missing
at /nix/store/c0qrx1svg4p1xviy2jsmjsqmz09rbdjx-source/flake.nix:33:20:
32| defaultApp = pkgs.myapp;
33| devShell = poetry2nix.mkPoetryEnv {
| ^
34| projectDir = ./.;
(use '--show-trace' to show detailed location information)
I expect what since poetry2nix is an binding references argument of outputs function, it will be available for evaluation of this function expression.
| 14:07:39 |
K900 | poetry2nix the flake doesn't have a mkPoetryEnv attribute | 14:08:56 |
K900 | The poetry2nix package in nixpkgs does | 14:09:46 |
K900 | If you want to use poetry2nix from git instead of the one in nixpkgs, you can use the overlay in the flake | 14:10:10 |
mou | confusing. can i do import of git hosted flake in nix repl ? to explore it and experiment | 14:11:08 |
K900 | You can with builtins.getFlake | 14:11:23 |
mou | thanks | 14:11:30 |
K900 | But basically you want something like
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable-small";
flake-utils.url = "github:numtide/flake-utils";
poetry2nix = {
url = "github:nix-community/poetry2nix";
inputs.nixpkgs.follows = "nixpkgs";
inputs.flake-utils.follows = "flake-utils";
};
};
outputs = { self, nixpkgs, flake-utils, poetry2nix }:
flake-utils.lib.eachDefaultSystem
(system:
let
pkgs = import nixpkgs {
overlays = [ poetry2nix.overlay ];
inherit system;
};
in
{
packages.your-app = pkgs.poetry2nix.mkPoetryApplication {
# stuff
};
}
)
}
| 14:12:38 |
mou | also expression in lambda passed to eachDefaultSystem contains this binding
23 inherit system;
24 overlays = [ self.overlay ];
25 };
Does it import nixpkgs with revision locked by flake, or just version defined as channel?
| 14:13:24 |
K900 | import nixpkgs re-imports the nixpkgs input | 14:14:00 |
K900 | import <nixpkgs> imports the channel | 14:14:05 |
K900 | (and will fail if you're not using --impure ) | 14:14:14 |
mou | * also expression in lambda passed to eachDefaultSystem contains this binding
22 pkgs = import nixpkgs {
23 inherit system;
24 overlays = [ self.overlay ];
25 };
Does it import nixpkgs with revision locked by flake, or just version defined as channel?
| 14:14:31 |
mou | thanks for clarification | 14:14:45 |
mou | So poetry2nix flake made all other functionality available through applying overlay to nixpkgs? So it kind of glue between everything defined in this flake modules and all other nix infrastructure? | 14:37:58 |
K900 | poetry2nix is included in nixpkgs | 14:38:30 |
K900 | The overlay just replaces the stable version in nixpkgs with the latest version from git | 14:38:43 |
K900 | Well, not really latest, but whichever one you have pinned | 14:38:50 |
mou | i'm trying to figure out how to work with shell and all my attempts to use mkPoetryEnv and using nix develop produces environments without python interpreter itself (and without poetry cli, but this is minor) even if derivation is called python3-3.9.9-env . I'm using snipets from Readme but have feelings i missed something important for understanding. | 14:50:53 |
mou | But according to python mkPoetryEnv returns result of python.withPackages. I guess i need to read about this function too | 14:52:46 |
mou | I found problem. I should use as devShell not the entire attirbute set returned by mkPoetryEnv, but only attribute env | 15:16:12 |
| nialov joined the room. | 15:23:20 |