On MacOs I've installed with brew the pipx:
brew install pipx
then pipx install black
$ pipx list
venvs are in /Users/mc/.local/pipx/venvs
apps are exposed on your $PATH at /Users/mc/.local/bin
package black 22.12.0, installed using Python 3.11.1
- black
- blackd
However, I keep getting missing dependency:
$ /Users/mc/.local/bin/blackd
Traceback (most recent call last):
File "/Users/mc/.local/bin/blackd", line 5, in <module>
from blackd import patched_main
File "/Users/mc/.local/pipx/venvs/black/lib/python3.11/site-packages/blackd/__init__.py", line 14, in <module>
raise ImportError(
ImportError: aiohttp dependency is not installed: No module named 'aiohttp'. Please re-install black with the '[d]' extra install to obtain aiohttp_cors: `pip install black[d]`
How to fix it?
Why pipx
is not solving this dependency while installing black
?
Why it uses some (no idea where is this installed) python 3.11.1
when my system python is 3.9.6
$ python3 --version
Python 3.9.6
EDIT
I've did as advised by below answer from @KarlKnechtel:
$ brew install python@3.10
==> Auto-updated Homebrew!
Updated 1 tap (romkatv/powerlevel10k).
You have 2 outdated formulae installed.
You can upgrade them with brew upgrade
or list them with brew outdated.
==> Fetching python@3.10
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.10/manifests/3.10.9
######################################################################## 100.0%
==> Downloading https://ghcr.io/v2/homebrew/core/python/3.10/blobs/sha256:a9b28161cec6e1a027f1eab7576af7
==> Downloading from https://pkg-containers.githubusercontent.com/ghcr1/blobs/sha256:a9b28161cec6e1a027f
######################################################################## 100.0%
==> Pouring python@3.10--3.10.9.arm64_monterey.bottle.tar.gz
==> /opt/homebrew/Cellar/python@3.10/3.10.9/bin/python3.10 -m ensurepip
==> /opt/homebrew/Cellar/python@3.10/3.10.9/bin/python3.10 -m pip install -v --no-deps --no-index --upgr
==> Caveats
Python has been installed as
/opt/homebrew/bin/python3
Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to
`python3`, `python3-config`, `pip3` etc., respectively, have been installed into
/opt/homebrew/opt/python@3.10/libexec/bin
You can install Python packages with
pip3 install <package>
They will install into the site-package directory
/opt/homebrew/lib/python3.10/site-packages
tkinter is no longer included with this formula, but it is available separately:
brew install python-tk@3.10
See: https://docs.brew.sh/Homebrew-and-Python
==> Summary
🍺 /opt/homebrew/Cellar/python@3.10/3.10.9: 3,110 files, 57.1MB
==> Running `brew cleanup python@3.10`...
Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP.
Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`).
so I got:
$ python3 --version
Python 3.10.9
$brew list python python3
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/2to3
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/2to3-3.10
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/idle3
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/idle3.10
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/pip3
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/pip3.10
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/pydoc3
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/pydoc3.10
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/python3
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/python3-config
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/python3.10
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/python3.10-config
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/wheel3
/opt/homebrew/Cellar/python@3.10/3.10.9/bin/wheel3.10
/opt/homebrew/Cellar/python@3.10/3.10.9/Frameworks/Python.framework/ (3055 files)
/opt/homebrew/Cellar/python@3.10/3.10.9/IDLE 3.app/Contents/ (8 files)
/opt/homebrew/Cellar/python@3.10/3.10.9/lib/pkgconfig/ (4 files)
/opt/homebrew/Cellar/python@3.10/3.10.9/libexec/bin/ (6 files)
/opt/homebrew/Cellar/python@3.10/3.10.9/libexec/wheel-0.38.4-py3-none-any.whl
/opt/homebrew/Cellar/python@3.10/3.10.9/Python Launcher 3.app/Contents/ (16 files)
/opt/homebrew/Cellar/python@3.10/3.10.9/share/man/ (2 files)
but still when I install black
it installs python 3.11
:
$pipx install black[d]
zsh: no matches found: black[d]
$pipx install black
installed package black 22.12.0, installed using Python 3.11.1
These apps are now globally available
- black
- blackd
done! ✨ 🌟 ✨
I solved it as in edit 1 but later you have to do according to this :
pipx install "black[d]" --force
but after that I got error:
dyld[56881]: Library not loaded: '/opt/homebrew/Cellar/python@3.9/3.9.13_1/Frameworks/Python.framework/Versions/3.9/Python'
Referenced from: '/Users/mc/Library/Application Support/pypoetry/venv/bin/python'
Reason: tried: '/opt/homebrew/Cellar/python@3.9/3.9.13_1/Frameworks/Python.framework/Versions/3.9/Python' (no such file), '/Library/Frameworks/Python.framework/Versions/3.9/Python' (no such file), '/System/Library/Frameworks/Python.framework/Versions/3.9/Python' (no such file)
so I had to:
curl -sSL https://install.python-poetry.org | python3 - --uninstall
curl -sSL https://install.python-poetry.org | python3 -
And now:
poetry env use /opt/homebrew/Cellar/python@3.10/3.10.9/bin/python3.10
as 3.10 is required for aiohttp
as mentioned by @KarlKnechel
When you use pipx
rather than pip
to install a package, it will:
pip
to install the package into that virtual environmentblackd
) will work, without having to activate the specific virtual environment first. That is its explicit purpose (ie, the reason not to just use pip
), and therefore why there is a different Python being used rather than the system Python.
To use the blackd
entry point defined by Black (which starts up a server), the aiohttp
optional dependency is required. This must be specified at installation. Per the error message, with pip
, this looks like pip install black[d]
.
However, from the Black release notes (since version 22.8.0; current version 22.12.0):
Python 3.11 is now supported, except for blackd as aiohttp does not support 3.11 as of publishing (#3234)
So, pipx
will need to use an older version to create the virtual environment.
From the pipx
documentation :
The default python executable used to install a package is typically the python used to execute pipx and can be overridden by setting the environment variable
PIPX_DEFAULT_PYTHON
.
Presumably, brew install pipx
installed pipx
into some 3.11 install that is not the system Python. This sort of thing happens because you are not intended to install anything into the system Python . As the name suggests, your (operating) system depends on it, and a rogue package could seriously harm your computer in any number of ways. (Hence why pip
is not available in it by default.)
You can:
use brew
to install 3.10 or earlier, then install pipx
to that, then proceed with pipx install black[d]
.
use venv
to create a virtual environment based off your system Python (3.9); this venv
should include pip
automatically by default (downloaded and installed by venv
). Activate this virtual environment, then use pip
to install pipx
in it, then proceed with pipx install black[d]
.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.