Python 3.14 Error in ERPNext V16 Installation with Frappe-manager on Docker WSL

The commands I ran in the terminal for the installation and encountered errors with are as follows. What can I do to install ERPNext V16 using frappe-manager?

furkan@DESKTOP-MMRR:~$ uv tool install frappe-manager \

–python 3.13 \

–with pyopenssl==24.1.0 \

–with cryptography==42.0.8

furkan@DESKTOP-MMRR:~$ fm create my-erpnext --apps frappe:version-16 --apps erpnext:version-16

⚡ fm directory doesn’t exists! Created at → /home/furkan/frappe

🔍 It seems like the first installation. Pulling docker images…️

⚡ Pulled ghcr.io/rtcamp/frappe-manager-frappe:v0.18.0.

⚡ Pulled ghcr.io/rtcamp/frappe-manager-nginx:v0.18.0.

⚡ Pulled redis:8-alpine.

⚡ Pulled ghcr.io/rtcamp/frappe-manager-prebake:v0.18.0.

⚡ Pulled mariadb:10.6.

⚡ Pulled jwilder/nginx-proxy:1.6.

⚡ Pulled axllent/mailpit:v1.22.

⚡ Pulled adminer:4.

🚧 Creating global services global-db, global-nginx-proxy.

⛔ Error Occured  Failed to pull compose services [‘global-db’, ‘global-nginx-proxy’] images.

🔍 More info about error is logged in /home/furkan/frappe/logs/fm.log

Traceback (most recent call last):

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/compose_project/compose_project.py”, line 79, in pull_images

richprint.live_lines(output, padding=(0, 0, 0, 2))

~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/display_manager/DisplayManager.py”, line 193, in live_lines

source, line = next(data)

~~~~^^^^^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/utils/docker.py”, line 98, in stream_stdout_and_stderr

raise DockerException(full_cmd, SubprocessOutput.from_output(output))

frappe_manager.docker_wrapper.DockerException.DockerException: The docker command executed was docker compose -f /home/furkan/frappe/services/docker-compose.yml pull.

It returned with code 1

The content of stdout can be found above the stacktrace (it wasn’t captured).

The content of stderr is

’ global-nginx-proxy Pulling

global-db Pulling

error getting credentials - err: fork/exec /usr/bin/docker-credential-desktop.exe: exec format error, out: ``’

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/main.py”, line 13, in cli_entrypoint

app()

~~~^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/typer/main.py”, line 340, in call

raise e

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/typer/main.py”, line 323, in call

return get_command(self)(*args, **kwargs)

~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/click/core.py”, line 1161, in call

return self.main(*args, **kwargs)

~~~~~~~~~^^^^^^^^^^^^^^^^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/typer/core.py”, line 740, in main

return _main(

self,

…<6 lines>…

**extra,

)

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/typer/core.py”, line 195, in _main

rv = self.invoke(ctx)

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/click/core.py”, line 1694, in invoke

super().invoke(ctx)

~~~~~~~~~~~~~~^^^^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/click/core.py”, line 1443, in invoke

return ctx.invoke(self.callback, **ctx.params)

~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/click/core.py”, line 788, in invoke

return __callback(*args, **kwargs)

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/typer/main.py”, line 698, in wrapper

return callback(**use_params)

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/commands.py”, line 135, in app_callback

services_manager.entrypoint_checks(start=True)

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/services_manager/services.py”, line 62, in entrypoint_checks

self.compose_project.pull_images()

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/compose_project/compose_project.py”, line 81, in pull_images

raise DockerComposeProjectFailedToPullImagesError(

self.compose_file_manager.compose_path, self.compose_file_manager.get_services_list()

)

frappe_manager.compose_project.exceptions.DockerComposeProjectFailedToPullImagesError: Failed to pull compose services [‘global-db’, ‘global-nginx-proxy’] images.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File “/home/furkan/.local/bin/fm”, line 10, in 

sys.exit(cli_entrypoint())

~~~~~~~~~~~~~~^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/main.py”, line 19, in cli_entrypoint

richprint.stop()

~~~~~~~~~~~~~~^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/display_manager/DisplayManager.py”, line 231, in stop

self.live.stop()

~~~~~~~~~~~~~~^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/rich/live.py”, line 151, in stop

self.console.clear_live()

~~~~~~~~~~~~~~~~~~~~~~~^^

File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/rich/console.py”, line 841, in clear_live

self._live_stack.pop()

~~~~~~~~~~~~~~~~~~~~^^

IndexError: pop from empty list

⡿ Populated conf directory.

=>  global-nginx-proxy Pulling

=>  global-db Pulling

=> error getting credentials - err: fork/exec /usr/bin/docker-credential-desktop.exe: exec format error, out: ``                                                                                                furkan@DESKTOP-MMRR:~$ nano ~/.docker/config.json

furkan@DESKTOP-MMRR:~$ sudo nano /usr/bin/docker-credential-desktop.exe

[sudo] password for furkan:

furkan@DESKTOP-MMRR:~$ sudo rm /usr/bin/docker-credential-desktop.exe

furkan@DESKTOP-MMRR:~$ docker logout

Removing login credentials for https://index.docker.io/v1/

furkan@DESKTOP-MMRR:~$ docker pull mariadb:10.6

10.6: Pulling from library/mariadb

Digest: sha256:daacc2f260f8ec999daa5e03a017a23a7e6fa3fb982aaf26e8b72f24daf03bc9

Status: Image is up to date for mariadb:10.6

furkan@DESKTOP-MMRR:~$ fm create my-erpnext --apps frappe:version-16 --apps erpnext:version-16

⚡ Global services will utilize ports 80, 443.

⚡ Started non running global services global-db, global-nginx-proxy.

⚡ Created all required directories.

⚡ Started bench services.

⚡ Configured common_site_config.json

⚡ Configured frappe server

⚡ Configured supervisor configs

⚡ Configured frappe app’s branch → version-15

⚡ global-db is available after 0 seconds

⚡ redis-cache is available after 0 seconds

⚡ redis-queue is available after 0 seconds

⚡ Removed prebaked app hrms

⛔ Error Occured: my-erpnext.localhost : Failed to install app frappe in python env.

╭  Error command output

│ INFO: App moved from apps/frappe to archived/apps/frappe-2026-06-11

│ Getting frappe

│ $ git clone https://github.com/frappe/frappe.git --branch version-16 --depth 1 --origin upstream

│ Cloning into ‘frappe’…

│ Installing frappe

│ $ uv pip install --quiet --upgrade -e /workspace/frappe-bench/apps/frappe  --python /workspace/frappe-bench/env/bin/python

│   × No solution found when resolving dependencies:

│   ╰─▶ Because the current Python version (3.12) does not satisfy

│       Python>=3.14,<3.15 and frappe==16.22.0 depends on Python>=3.14,<3.15, we

│       can conclude that frappe==16.22.0 cannot be used.

│       And because only frappe==16.22.0 is available and you require frappe, we

│       can conclude that your requirements are unsatisfiable.

│ Error occured during app install: uv pip install --quiet --upgrade -e /workspace/frappe-bench/apps/frappe  --python /workspace/frappe-bench/env/bin/python

Hi @furkanayyildiz

Change your python install version at the start from

to

1 Like

"Thank you. Using Python version 3.15 didn’t work for me and resulted in an error. While I can install ERPNext v15 with ease, why is v16 so complex?

furkan@DESKTOP-MR00FO6:~$ fm help
Traceback (most recent call last):
  File "/home/furkan/.local/bin/fm", line 4, in <module>
    from frappe_manager.main import cli_entrypoint
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/frappe_manager/main.py", line 8, in <module>
    from frappe_manager.commands import app
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/frappe_manager/commands.py", line 12, in <module>
    from frappe_manager.site_manager.SiteManager import BenchesManager
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/frappe_manager/site_manager/SiteManager.py", line 7, in <module>
    from frappe_manager.site_manager.site import Bench
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/frappe_manager/site_manager/site.py", line 39, in <module>
    from frappe_manager.ssl_manager.ssl_certificate_manager import SSLCertificateManager
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/frappe_manager/ssl_manager/ssl_certificate_manager.py", line 5, in <module>
    from frappe_manager.ssl_manager.letsencrypt_certificate_service import LetsEncryptCertificateService
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/frappe_manager/ssl_manager/letsencrypt_certificate_service.py", line 5, in <module>
    from certbot._internal.main import make_or_verify_needed_dirs
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/certbot/_internal/main.py", line 21, in <module>
    import josepy as jose
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/josepy/__init__.py", line 71, in <module>
    from josepy.jws import JWS, Header, Signature
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/josepy/jws.py", line 52, in <module>
    class Header(json_util.JSONObjectWithFields):
    ...<103 lines>...
                raise errors.DeserializationError(error)
  File "/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.15/site-packages/josepy/json_util.py", line 236, in __new__
    raise ValueError(
        f"Field `{key}` in JSONObject `{name}` has no type annotation."
    )
ValueError: Field `alg` in JSONObject `Header` has no type annotation.

Frappe Manager is installed using Python v3.13, but ERPNext v16 requires Python v3.14 for installation. How can I install Frappe Manager with Python v3.13 and install ERPNext using Python v3.14?

@furkanayyildiz

Yes you are right - FM requires python 3.13 which is sufficient

Each docker bench you create has its own isolated env with python image which needs to be 3.14 for v16

Can you try this command with python 3.13: -

fm create mybench --apps frappe:version-16 --apps erpnext:version-16

1 Like

“When I apply what you said, I get the following error.”

furkan@DESKTOP-MR00FO6:~$ python3 --version
Python 3.12.3
furkan@DESKTOP-MR00FO6:~$ uv tool install --python 3.13 frappe-manager
Resolved 51 packages in 7.32s
Built cloudflare==2.19.4
Prepared 50 packages in 58.80s
Installed 51 packages in 45ms

  • acme==3.3.0
  • annotated-types==0.7.0
  • attrs==26.1.0
  • certbot==2.11.1
  • certbot-dns-cloudflare==2.11.1
  • certifi==2026.5.20
  • cffi==2.0.0
  • charset-normalizer==3.4.7
  • click==8.1.8
  • cloudflare==2.19.4
  • configargparse==1.7.5
  • configobj==5.0.9
  • cryptography==48.0.1
  • distro==1.9.0
  • dnspython==2.8.0
  • email-validator==2.3.0
  • frappe-manager==0.18.0
  • idna==3.18
  • inquirerpy==0.3.4
  • jinja2==3.1.6
  • josepy==1.15.0
  • jsonlines==4.0.0
  • markdown-it-py==4.2.0
  • markupsafe==3.0.3
  • mdurl==0.1.2
  • ngrok==1.7.0
  • parsedatetime==2.6
  • passlib==1.7.4
  • pfzy==0.3.4
  • prompt-toolkit==3.0.52
  • psutil==5.9.8
  • pycparser==3.0
  • pydantic==2.13.4
  • pydantic-core==2.46.4
  • pygments==2.20.0
  • pyopenssl==26.2.0
  • pyrfc3339==2.1.0
  • pytz==2026.2
  • pyyaml==6.0.3
  • requests==2.34.2
  • rich==15.0.0
  • ruamel-yaml==0.18.17
  • ruamel-yaml-clib==0.2.15
  • setuptools==82.0.1
  • shellingham==1.5.4
  • tomlkit==0.12.5
  • typer==0.15.4
  • typing-extensions==4.15.0
  • typing-inspection==0.4.2
  • urllib3==2.7.0
  • wcwidth==0.8.1
    Installed 1 executable: fm
    furkan@DESKTOP-MR00FO6:~$ uv tool upgrade frappe-manager
    Nothing to upgrade
    furkan@DESKTOP-MR00FO6:~$ fm create mybench --apps frappe:version-16 --apps erpnext:version-16
    Traceback (most recent call last):
    File “/home/furkan/.local/bin/fm”, line 4, in
    from frappe_manager.main import cli_entrypoint
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/main.py”, line 8, in
    from frappe_manager.commands import app
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/commands.py”, line 12, in
    from frappe_manager.site_manager.SiteManager import BenchesManager
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/site_manager/SiteManager.py”, line 7, in
    from frappe_manager.site_manager.site import Bench
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/site_manager/site.py”, line 39, in
    from frappe_manager.ssl_manager.ssl_certificate_manager import SSLCertificateManager
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/ssl_manager/ssl_certificate_manager.py”, line 5, in
    from frappe_manager.ssl_manager.letsencrypt_certificate_service import LetsEncryptCertificateService
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/frappe_manager/ssl_manager/letsencrypt_certificate_service.py”, line 5, in
    from certbot._internal.main import make_or_verify_needed_dirs
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/certbot/_internal/main.py”, line 24, in
    from acme import client as acme_client
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/acme/client.py”, line 27, in
    from acme import challenges
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/acme/challenges.py”, line 24, in
    from acme import crypto_util
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/acme/crypto_util.py”, line 504, in
    extensions: Optional[List[crypto.X509Extension]] = None,
    ^^^^^^^^^^^^^^^^^^^^
    File “/home/furkan/.local/share/uv/tools/frappe-manager/lib/python3.13/site-packages/cryptography/utils.py”, line 76, in getattr
    obj = getattr(self._module, name)
    AttributeError: module ‘OpenSSL.crypto’ has no attribute ‘X509Extension’
    furkan@DESKTOP-MR00FO6:~$

It has already been reported at - Bug: Current PyPI release (0.18.0) fails at runtime due to outdated SSL dependency chain · Issue #411 · rtCamp/Frappe-Manager · GitHub

In the meantime try

uv pip install --python ~/.local/share/uv/tools/frappe-manager/bin/python \
"pyOpenSSL==25.3.0" \
"cryptography==46.0.3"

or

uv tool install git+https://github.com/rtcamp/frappe-manager@develop
1 Like

This method worked out. Thanks for the help, man.

My pleasure - dont forget to spread the FOSS love :heart: - treat/help others as you would like to be treated/helped

1 Like