diff --git a/Library/Homebrew/dev-cmd/audit.rb b/Library/Homebrew/dev-cmd/audit.rb index bef4ec4d1d..ae3332c2db 100644 --- a/Library/Homebrew/dev-cmd/audit.rb +++ b/Library/Homebrew/dev-cmd/audit.rb @@ -508,7 +508,6 @@ module Homebrew bash-completion@2 gnupg@1.4 lua@5.1 - python@2 numpy@1.16 ].freeze @@ -706,7 +705,6 @@ module Homebrew versioned_head_spec = %w[ bash-completion@2 imagemagick@6 - python@2 ] problem head_spec_message unless versioned_head_spec.include?(formula.name) end diff --git a/Library/Homebrew/exceptions.rb b/Library/Homebrew/exceptions.rb index 3c81060a06..47ea8c56e3 100644 --- a/Library/Homebrew/exceptions.rb +++ b/Library/Homebrew/exceptions.rb @@ -335,8 +335,8 @@ class FormulaAmbiguousPythonError < RuntimeError def initialize(formula) super <<~EOS The version of python to use with the virtualenv in the `#{formula.full_name}` formula - cannot be guessed automatically. If the simultaneous use of python and python@2 - is intentional, please add `:using => "python"` or `:using => "python@2"` to + cannot be guessed automatically. If the simultaneous use of multiple pythons + is intentional, please add `:using => "python@x.y"` to `virtualenv_install_with_resources` to resolve the ambiguity manually. EOS end diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index b465de0580..fb61d0fb82 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2387,8 +2387,6 @@ class Formula # depends_on "postgresql" if build.without? "sqlite" #
# Python 3.x if the `--with-python` is given to `brew install example`
     # depends_on "python3" => :optional
- #
# Python 2.7:
-    # depends_on "python@2"
def depends_on(dep) specs.each { |spec| spec.depends_on(dep) } end diff --git a/Library/Homebrew/language/python.rb b/Library/Homebrew/language/python.rb index 888969df2c..edcf52dd08 100644 --- a/Library/Homebrew/language/python.rb +++ b/Library/Homebrew/language/python.rb @@ -26,7 +26,6 @@ module Language def self.each_python(build, &block) original_pythonpath = ENV["PYTHONPATH"] pythons = { "python@3" => "python3", - "python@2" => "python2.7", "pypy" => "pypy", "pypy3" => "pypy3" } pythons.each do |python_formula, python| @@ -163,17 +162,16 @@ module Language # Creates a virtualenv in `libexec`, installs all `resource`s defined # on the formula, and then installs the formula. An options hash may be # passed (e.g., `:using => "python"`) to override the default, guessed - # formula preference for python or python2, or to resolve an ambiguous - # case where it's not clear whether python or python2 should be the + # formula preference for python or python@x.y, or to resolve an ambiguous + # case where it's not clear whether python or python@x.y should be the # default guess. def virtualenv_install_with_resources(options = {}) python = options[:using] if python.nil? - pythons = %w[python python@2 python2 python3 python@3 python@3.8 pypy pypy3] + pythons = %w[python python3 python@3 python@3.8 pypy pypy3] wanted = pythons.select { |py| needs_python?(py) } raise FormulaAmbiguousPythonError, self if wanted.size > 1 - python = wanted.first || "python2.7" python = "python3" if python == "python" end venv = virtualenv_create(libexec, python.delete("@")) @@ -221,16 +219,14 @@ module Language next unless f.symlink? next unless (rp = f.realpath.to_s).start_with? HOMEBREW_CELLAR - python = rp.include?("python@2") ? "python@2" : "python" - new_target = rp.sub %r{#{HOMEBREW_CELLAR}/#{python}/[^/]+}, Formula[python].opt_prefix + new_target = rp.sub %r{#{HOMEBREW_CELLAR}/python/[^/]+}, Formula["python"].opt_prefix f.unlink f.make_symlink new_target end Pathname.glob(@venv_root/"lib/python*/orig-prefix.txt").each do |prefix_file| prefix_path = prefix_file.read - python = prefix_path.include?("python@2") ? "python@2" : "python" - prefix_path.sub! %r{^#{HOMEBREW_CELLAR}/#{python}/[^/]+}, Formula[python].opt_prefix + prefix_path.sub! %r{^#{HOMEBREW_CELLAR}/#{python}/[^/]+}, Formula["python"].opt_prefix prefix_file.atomic_write prefix_path end end diff --git a/docs/Gems,-Eggs-and-Perl-Modules.md b/docs/Gems,-Eggs-and-Perl-Modules.md index 9b6bd42308..1323981730 100644 --- a/docs/Gems,-Eggs-and-Perl-Modules.md +++ b/docs/Gems,-Eggs-and-Perl-Modules.md @@ -27,25 +27,7 @@ writable location. But if you installed Homebrew as we recommend, `/usr/local` will be writable without sudo. So now you are good to install the development tools you need without risking the use of sudo. -## Python packages (eggs) without sudo - -Rather than changing the rights on `/Library/Python`, we recommend the -following options: - -### With a brewed Python -Note, `easy_install` is deprecated. We install `pip` (or `pip2` for -Python 2) along with python/python2. - -We set up distutils such that `pip install` will always put modules in -`$(brew --prefix)/lib/pythonX.Y/site-packages` and scripts in -`$(brew --prefix)/share/python`. Therefore, you won’t need sudo! - -Do `brew info python` or `brew info python@2` for precise information -about the paths. Note, a brewed Python still searches for modules in -`/Library/Python/X.Y/site-packages` and also in -`~/Library/Python/X.Y/lib/python/site-packages`. - -### With system’s Python +### Python packages (eggs) without sudo using system’s Python _This is only recommended if you **don't** use a brewed Python._ On macOS, any [Python version X.Y also searches in @@ -66,7 +48,7 @@ following content: install_lib = ~/Library/Python/$py_version_short/lib/python/site-packages ``` -### Using virtualenv (works with brewed and system’s Python) +### Using virtualenv (with system Python) [Virtualenv](https://virtualenv.pypa.io/) ships `pip` and creates isolated Python environments with separate site-packages, diff --git a/docs/Homebrew-and-Python.md b/docs/Homebrew-and-Python.md index 169ba9e120..a1994a3df1 100644 --- a/docs/Homebrew-and-Python.md +++ b/docs/Homebrew-and-Python.md @@ -4,45 +4,33 @@ This page describes how Python is handled in Homebrew for users. See [Python for Homebrew should work with any [CPython](https://stackoverflow.com/questions/2324208/is-there-any-difference-between-cpython-and-python) and defaults to the macOS system Python. -Homebrew provides formulae to brew Python 3.x and a more up-to-date Python 2.7.x. +Homebrew provides formulae to brew Python 3.x. -**Important:** If you choose to install a Python which isn't either of these two (system Python or brewed Python), the Homebrew team cannot support any breakage that may occur. +Homebrew provided a `python@2` formula until the end of 2019, at which point it was removed due to the Python 2 deprecation. -## Python 3.x or Python 2.x -Homebrew provides one formula for Python 3.x (`python`) and another for Python 2.7.x (`python@2`). +**Important:** If you choose to use a Python which isn't either of these two (system Python or brewed Python), the Homebrew team cannot support any breakage that may occur. -The executables are organised as follows so that Python 2 and Python 3 can both be installed without conflict: +## Python 3.x +Homebrew provides a formula for Python 3.x (`python`). + +The executables are organised as follows: * `python3` points to Homebrew's Python 3.x (if installed) -* `python2` points to Homebrew's Python 2.7.x (if installed) -* `python` points to Homebrew's Python 2.7.x (if installed) otherwise the macOS system Python. Check out `brew info python` if you wish to add Homebrew's 3.x `python` to your `PATH`. * `pip3` points to Homebrew's Python 3.x's pip (if installed) -* `pip` and `pip2` point to Homebrew's Python 2.7.x's pip (if installed) - -([Wondering which one to choose?](https://wiki.python.org/moin/Python2orPython3)) ## Setuptools, Pip, etc. -The Python formulae install [pip](https://pip.pypa.io/) (as `pip` or `pip2`) and [Setuptools](https://pypi.python.org/pypi/setuptools). +The Python formulae install [pip](https://pip.pypa.io/) (as `pip3`) and [Setuptools](https://pypi.python.org/pypi/setuptools). -Setuptools can be updated via pip, without having to re-brew Python: +Setuptools can be updated via pip3, without having to re-brew Python: ```sh -python -m pip install --upgrade setuptools +python3 -m pip3 install --upgrade setuptools ``` -Similarly, pip can be used to upgrade itself via: +Similarly, pip3 can be used to upgrade itself via: ```sh -python -m pip install --upgrade pip -``` - -### Note on `pip install --user` -The normal `pip install --user` is disabled for brewed Python. This is because of a bug in distutils, because Homebrew writes a `distutils.cfg` which sets the package `prefix`. - -A possible workaround (which puts executable scripts in `~/Library/Python/./bin`) is: - -```sh -python -m pip install --user --install-option="--prefix=" +python3 -m pip3 install --upgrade pip3 ``` ## `site-packages` and the `PYTHONPATH` @@ -75,7 +63,7 @@ These should be installed via `pip install `. To discover, you can use **Note:** macOS's system Python does not provide `pip`. Follow the [pip documentation](https://pip.readthedocs.io/en/stable/installing/#install-pip) to install it for your system Python if you would like it. ## Brewed Python modules -For brewed Python, modules installed with `pip` or `python setup.py install` will be installed to the `$(brew --prefix)/lib/pythonX.Y/site-packages` directory (explained above). Executable Python scripts will be in `$(brew --prefix)/bin`. +For brewed Python, modules installed with `pip3` or `python3 setup.py install` will be installed to the `$(brew --prefix)/lib/pythonX.Y/site-packages` directory (explained above). Executable Python scripts will be in `$(brew --prefix)/bin`. The system Python may not know which compiler flags to set in order to build bindings for software installed in Homebrew so you may need to run: @@ -92,4 +80,4 @@ Homebrew will still install Python modules into Homebrew's `site-packages` and * Virtualenv has a `--system-site-packages` switch to allow "global" (i.e. Homebrew's) `site-packages` to be accessible from within the virtualenv. ## Why is Homebrew's Python being installed as a dependency? -Formulae that declare an unconditional dependency on the `"python"` or `"python@2"` formulae are bottled against Homebrew's Python 3.x or 2.7.x and require it to be installed. +Formulae that declare an unconditional dependency on the `"python"` formula are bottled against Homebrew's Python 3.x and require it to be installed. diff --git a/docs/Homebrew-homebrew-core-Merge-Checklist.md b/docs/Homebrew-homebrew-core-Merge-Checklist.md index 76416865e7..44cab7b064 100644 --- a/docs/Homebrew-homebrew-core-Merge-Checklist.md +++ b/docs/Homebrew-homebrew-core-Merge-Checklist.md @@ -28,7 +28,7 @@ Check for: - other teams drop new version with minor release 0 but promote it to stable only after a few minor releases - if the software uses only hosted version control (such as GitHub, GitLab or Bitbucket), the release should be tagged and if upstream marks latest/pre-releases, PR must use latest - does changelog mention addition/removal of dependency and is it addressed in the PR - - does formula depend on versioned formula (for example `python@2`, `go@1.10`, `erlang@17`) that can be upgraded + - does formula depend on versioned formula (for example `python@3.7`, `go@1.10`, `erlang@17`) that can be upgraded - commits - contain one formula change per commit - ask author to squash diff --git a/docs/Python-for-Formula-Authors.md b/docs/Python-for-Formula-Authors.md index da6fd632d0..31a1f4b8ba 100644 --- a/docs/Python-for-Formula-Authors.md +++ b/docs/Python-for-Formula-Authors.md @@ -149,7 +149,7 @@ Sometimes we have to edit a `Makefile` on-the-fly to use our prefix for the Pyth Libraries built for Python 3 should include `depends_on "python"`, which will bottle against Homebrew's Python 3.x. Python 2.x libraries must function when they are installed against either the system Python or brewed Python. -Python 2 libraries do not need a `depends_on "python@2"` declaration; they will be built with the system Python, but should still be usable with any other Python 2.7. If this is not the case, it's an upstream bug; [here's some advice for resolving it](https://blog.tim-smith.us/2015/09/python-extension-modules-os-x/). +Python 2 libraries need a `uses_from_macos "python@2"` declaration; they will be built with the system Python, but should still be usable with any other Python 2.7. If this is not the case, it's an upstream bug; [here's some advice for resolving it](https://blog.tim-smith.us/2015/09/python-extension-modules-os-x/). ### Installing