diff options
Diffstat (limited to 'doc')
-rw-r--r-- | doc/builders/images/dockertools.section.md | 6 | ||||
-rw-r--r-- | doc/builders/packages/fuse.section.md | 19 | ||||
-rw-r--r-- | doc/builders/packages/index.xml | 1 | ||||
-rw-r--r-- | doc/languages-frameworks/python.section.md | 81 |
4 files changed, 78 insertions, 29 deletions
diff --git a/doc/builders/images/dockertools.section.md b/doc/builders/images/dockertools.section.md index 40d4dba1b85ee..23662f9bbfe45 100644 --- a/doc/builders/images/dockertools.section.md +++ b/doc/builders/images/dockertools.section.md @@ -111,6 +111,12 @@ Create a Docker image with many of the store paths being on their own layer to i *Default:* the output path's hash +`fromImage` _optional_ + +: The repository tarball containing the base image. It must be a valid Docker image, such as one exported by `docker save`. + + *Default:* `null`, which can be seen as equivalent to `FROM scratch` of a `Dockerfile`. + `contents` _optional_ : Top level paths in the container. Either a single derivation, or a list of derivations. diff --git a/doc/builders/packages/fuse.section.md b/doc/builders/packages/fuse.section.md new file mode 100644 index 0000000000000..5603481115e72 --- /dev/null +++ b/doc/builders/packages/fuse.section.md @@ -0,0 +1,19 @@ +# FUSE {#sec-fuse} + +Some packages rely on +[FUSE](https://www.kernel.org/doc/html/latest/filesystems/fuse.html) to provide +support for additional filesystems not supported by the kernel. + +In general, FUSE software are primarily developed for Linux but many of them can +also run on macOS. Nixpkgs supports FUSE packages on macOS, but it requires +[macFUSE](https://osxfuse.github.io) to be installed outside of Nix. macFUSE +currently isn't packaged in Nixpkgs mainly because it includes a kernel +extension, which isn't supported by Nix outside of NixOS. + +If a package fails to run on macOS with an error message similar to the +following, it's a likely sign that you need to have macFUSE installed. + + dyld: Library not loaded: /usr/local/lib/libfuse.2.dylib + Referenced from: /nix/store/w8bi72bssv0bnxhwfw3xr1mvn7myf37x-sshfs-fuse-2.10/bin/sshfs + Reason: image not found + [1] 92299 abort /nix/store/w8bi72bssv0bnxhwfw3xr1mvn7myf37x-sshfs-fuse-2.10/bin/sshfs diff --git a/doc/builders/packages/index.xml b/doc/builders/packages/index.xml index e1e2fef3f16a8..9653bae472d47 100644 --- a/doc/builders/packages/index.xml +++ b/doc/builders/packages/index.xml @@ -12,6 +12,7 @@ <xi:include href="emacs.section.xml" /> <xi:include href="firefox.section.xml" /> <xi:include href="fish.section.xml" /> + <xi:include href="fuse.section.xml" /> <xi:include href="ibus.section.xml" /> <xi:include href="kakoune.section.xml" /> <xi:include href="linux.section.xml" /> diff --git a/doc/languages-frameworks/python.section.md b/doc/languages-frameworks/python.section.md index 26458c3906e6f..69f17b83e495f 100644 --- a/doc/languages-frameworks/python.section.md +++ b/doc/languages-frameworks/python.section.md @@ -7,8 +7,9 @@ #### Overview Several versions of the Python interpreter are available on Nix, as well as a -high amount of packages. The attribute `python` refers to the default -interpreter, which is currently CPython 2.7. It is also possible to refer to +high amount of packages. The attribute `python3` refers to the default +interpreter, which is currently CPython 3.8. The attribute `python` refers to +CPython 2.7 for backwards-compatibility. It is also possible to refer to specific versions, e.g. `python38` refers to CPython 3.8, and `pypy` refers to the default PyPy interpreter. @@ -638,7 +639,7 @@ are disabled. #### Using pythonImportsCheck -Although unit tests are highly prefered to valid correctness of a package. Not +Although unit tests are highly prefered to validate correctness of a package, not all packages have test suites that can be ran easily, and some have none at all. To help ensure the package still works, `pythonImportsCheck` can attempt to import the listed modules. @@ -762,10 +763,10 @@ and in this case the `python38` interpreter is automatically used. Versions 2.7, 3.6, 3.7, 3.8 and 3.9 of the CPython interpreter are available as respectively `python27`, `python36`, `python37`, `python38` and `python39`. The aliases `python2` and `python3` correspond to respectively `python27` and -`python38`. The default interpreter, `python`, maps to `python2`. The PyPy -interpreters compatible with Python 2.7 and 3 are available as `pypy27` and -`pypy3`, with aliases `pypy2` mapping to `pypy27` and `pypy` mapping to `pypy2`. -The Nix expressions for the interpreters can be found in +`python39`. The attribute `python` maps to `python2`. The PyPy interpreters +compatible with Python 2.7 and 3 are available as `pypy27` and `pypy3`, with +aliases `pypy2` mapping to `pypy27` and `pypy` mapping to `pypy2`. The Nix +expressions for the interpreters can be found in `pkgs/development/interpreters/python`. All packages depending on any Python interpreter get appended @@ -788,6 +789,23 @@ Each interpreter has the following attributes: - `executable`. Name of the interpreter executable, e.g. `python3.8`. - `pkgs`. Set of Python packages for that specific interpreter. The package set can be modified by overriding the interpreter and passing `packageOverrides`. +### Optimizations + +The Python interpreters are by default not build with optimizations enabled, because +the builds are in that case not reproducible. To enable optimizations, override the +interpreter of interest, e.g using + +``` +let + pkgs = import ./. {}; + mypython = pkgs.python3.override { + enableOptimizations = true; + reproducibleBuild = false; + self = mypython; + }; +in mypython +``` + ### Building packages and applications Python libraries and applications that use `setuptools` or @@ -1487,11 +1505,12 @@ If you need to change a package's attribute(s) from `configuration.nix` you coul nixpkgs.config.packageOverrides = super: { python = super.python.override { packageOverrides = python-self: python-super: { - zerobin = python-super.zerobin.overrideAttrs (oldAttrs: { - src = super.fetchgit { - url = "https://github.com/sametmax/0bin"; - rev = "a344dbb18fe7a855d0742b9a1cede7ce423b34ec"; - sha256 = "16d769kmnrpbdr0ph0whyf4yff5df6zi4kmwx7sz1d3r6c8p6xji"; + twisted = python-super.twisted.overrideAttrs (oldAttrs: { + src = super.fetchPipy { + pname = "twisted"; + version = "19.10.0"; + sha256 = "7394ba7f272ae722a74f3d969dcf599bc4ef093bc392038748a490f1724a515d"; + extension = "tar.bz2"; }; }); }; @@ -1499,9 +1518,11 @@ If you need to change a package's attribute(s) from `configuration.nix` you coul }; ``` -`pythonPackages.zerobin` is now globally overridden. All packages and also the -`zerobin` NixOS service use the new definition. Note that `python-super` refers -to the old package set and `python-self` to the new, overridden version. +`pythonPackages.twisted` is now globally overridden. +All packages and also all NixOS services that reference `twisted` +(such as `services.buildbot-worker`) now use the new definition. +Note that `python-super` refers to the old package set and `python-self` +to the new, overridden version. To modify only a Python package set instead of a whole Python derivation, use this snippet: @@ -1509,7 +1530,7 @@ this snippet: ```nix myPythonPackages = pythonPackages.override { overrides = self: super: { - zerobin = ...; + twisted = ...; }; } ``` @@ -1522,11 +1543,12 @@ Use the following overlay template: self: super: { python = super.python.override { packageOverrides = python-self: python-super: { - zerobin = python-super.zerobin.overrideAttrs (oldAttrs: { - src = super.fetchgit { - url = "https://github.com/sametmax/0bin"; - rev = "a344dbb18fe7a855d0742b9a1cede7ce423b34ec"; - sha256 = "16d769kmnrpbdr0ph0whyf4yff5df6zi4kmwx7sz1d3r6c8p6xji"; + twisted = python-super.twisted.overrideAttrs (oldAttrs: { + src = super.fetchPypi { + pname = "twisted"; + version = "19.10.0"; + sha256 = "7394ba7f272ae722a74f3d969dcf599bc4ef093bc392038748a490f1724a515d"; + extension = "tar.bz2"; }; }); }; @@ -1551,13 +1573,11 @@ In a `setup.py` or `setup.cfg` it is common to declare dependencies: ### Contributing guidelines -Following rules are desired to be respected: +The following rules are desired to be respected: * Python libraries are called from `python-packages.nix` and packaged with `buildPythonPackage`. The expression of a library should be in `pkgs/development/python-modules/<name>/default.nix`. -* Libraries in `pkgs/top-level/python-packages.nix` are sorted - alphanumerically to avoid merge conflicts and ease locating attributes. * Python applications live outside of `python-packages.nix` and are packaged with `buildPythonApplication`. * Make sure libraries build for all Python interpreters. @@ -1567,8 +1587,11 @@ Following rules are desired to be respected: case, when you disable tests, leave a comment explaining why. * Commit names of Python libraries should reflect that they are Python libraries, so write for example `pythonPackages.numpy: 1.11 -> 1.12`. -* Attribute names in `python-packages.nix` should be normalized according to - [PEP 0503](https://www.python.org/dev/peps/pep-0503/#normalized-names). This - means that characters should be converted to lowercase and `.` and `_` should - be replaced by a single `-` (foo-bar-baz instead of Foo__Bar.baz ) -* Attribute names in `python-packages.nix` should be sorted alphanumerically. +* Attribute names in `python-packages.nix` as well as `pname`s should match the + library's name on PyPI, but be normalized according to [PEP + 0503](https://www.python.org/dev/peps/pep-0503/#normalized-names). This means + that characters should be converted to lowercase and `.` and `_` should be + replaced by a single `-` (foo-bar-baz instead of Foo__Bar.baz). + If necessary, `pname` has to be given a different value within `fetchPypi`. +* Attribute names in `python-packages.nix` should be sorted alphanumerically to + avoid merge conflicts and ease locating attributes. |