简体   繁体   English

用pipx安装black不安装依赖aiohttp

[英]Install black with pipx not install dependencies aiohttp

On MacOs I've installed with brew the pipx:在 MacOs 上我用 brew 安装了 pipx:

brew install pipx

then pipx install black然后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]`
  1. How to fix it?如何解决?

  2. Why pipx is not solving this dependency while installing black ?为什么pipx在安装black时没有解决这个依赖关系?

  3. Why it uses some (no idea where is this installed) python 3.11.1 when my system python is 3.9.6当我的系统 python 是3.9.6时,为什么它使用一些(不知道安装在哪里)python 3.11.1

    $ python3 --version $ python3 --version
    Python 3.9.6 Python 3.9.6

EDIT编辑

I've did as advised by below answer from @KarlKnechtel:我按照@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 :但当我安装black时,它仍然安装 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 :我在编辑 1 中解决了它,但后来你必须按照这个做:

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正如aiohttp所提到的,aiohttp 需要 3.10

When you use pipx rather than pip to install a package, it will:当您使用pipx而不是pip安装 package 时,它将:

  • create a new virtual environment for the package为 package创建一个新的虚拟环境
  • use pip to install the package into that virtual environment使用pip将 package 安装到该虚拟环境中
  • Do some additional setup work, so that "entry points" for the package (commands created by the package to use directly at the command line, such as blackd ) will work, without having to activate the specific virtual environment first.做一些额外的设置工作,以便 package 的“入口点”(由 package 创建的命令直接在命令行中使用,例如blackd )将起作用,而无需先激活特定的虚拟环境。

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.这是它的明确目的(即,不只使用pip的原因),因此使用了不同的 Python 而不是系统 Python。

To use the blackd entry point defined by Black (which starts up a server), the aiohttp optional dependency is required.要使用 Black 定义的blackd入口点(启动服务器),需要aiohttp可选依赖项。 This must be specified at installation.这必须在安装时指定。 Per the error message, with pip , this looks like pip install black[d] .根据错误消息,对于pip ,这看起来像pip install black[d]

However, from the Black release notes (since version 22.8.0; current version 22.12.0):但是,从 Black 发行说明(从版本 22.8.0 开始;当前版本 22.12.0):

Python 3.11 is now supported, except for blackd as aiohttp does not support 3.11 as of publishing (#3234) Python 现在支持 3.11,blackd 除外,因为aiohttp在发布时不支持 3.11 (#3234)

So, pipx will need to use an older version to create the virtual environment.因此, pipx将需要使用旧版本来创建虚拟环境。

From the pipx documentation :来自pipx文档

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 .用于安装 package 的默认 python 可执行文件通常是用于执行 pipx 的 python 并且可以通过设置环境变量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 .据推测, brew install pipx将 pipx 安装到不是系统pipx的某些 3.11 安装中。发生这种情况是因为您不打算将任何东西安装到系统 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.顾名思义,您的(操作系统)系统依赖于它,流氓 package 可能会以多种方式严重损害您的计算机。 (Hence why pip is not available in it by default.) (因此默认情况下,为什么pip在其中不可用。)

You can:你可以:

  • use brew to install 3.10 or earlier, then install pipx to that, then proceed with pipx install black[d] .使用brew安装 3.10 或更早版本,然后安装pipx ,然后继续pipx install black[d]

  • use venv to create a virtual environment based off your system Python (3.9);使用venv创建一个基于你的系统 Python (3.9) 的虚拟环境; this venv should include pip automatically by default (downloaded and installed by venv ).默认情况下,此venv应自动包含pip (由venv下载并安装)。 Activate this virtual environment, then use pip to install pipx in it, then proceed with pipx install black[d] .激活此虚拟环境,然后使用pip在其中安装pipx ,然后继续pipx install black[d]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM