diff --git a/Formula/python@3.6.rb b/Formula/python@3.6.rb deleted file mode 100644 index 321d6c5..0000000 --- a/Formula/python@3.6.rb +++ /dev/null @@ -1,320 +0,0 @@ -class PythonAT36 < Formula - desc "Interpreted, interactive, object-oriented programming language" - homepage "https://www.python.org/" - url "https://www.python.org/ftp/python/3.6.14/Python-3.6.14.tar.xz" - sha256 "2663a7a0cfbd00fc76269dce4317db0b54be53c0f4d705aabb32b87efa02d5ae" - license "Python-2.0" - head "https://github.com/python/cpython.git", branch: "3.6" - - livecheck do - url "https://www.python.org/ftp/python/" - regex(%r{href=.*?v?(3\.6(?:\.\d+)*)/?["' >]}i) - end - - bottle do - root_url "https://github.com/sashkab/homebrew-python/releases/download/python@3.6-3.6.14" - sha256 catalina: "887ca2f38ab382f2488857251e4f53f7ea99272e8e624039ce0f98b6ecf21bc0" - end - - # setuptools remembers the build flags python is built with and uses them to - # build packages later. Xcode-only systems need different flags. - pour_bottle? do - reason <<~EOS - The bottle needs the Apple Command Line Tools to be installed. - You can install them, if desired, with: - xcode-select --install - EOS - satisfy { MacOS::CLT.installed? } - end - - keg_only :versioned_formula - - depends_on "pkg-config" => :build - depends_on "gdbm" - depends_on "openssl@1.1" - depends_on "readline" - depends_on "sqlite" - depends_on "xz" - - skip_clean "bin/pip3", "bin/pip-3.4", "bin/pip-3.5", "bin/pip-3.6" - - resource "setuptools" do - url "https://pypi.org/packages/source/s/setuptools/setuptools-57.0.0.tar.gz" - sha256 "401cbf33a7bf817d08014d51560fc003b895c4cdc1a5b521ad2969e928a07535" - end - - resource "pip" do - url "https://www.pypi.org/packages/source/p/pip/pip-21.1.2.tar.gz" - sha256 "eb5df6b9ab0af50fe1098a52fd439b04730b6e066887ff7497357b9ebd19f79b" - end - - resource "wheel" do - url "https://pypi.org/packages/source/w/wheel/wheel-0.36.2.tar.gz" - sha256 "e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e" - end - - def install - # Unset these so that installing pip and setuptools puts them where we want - # and not into some other Python the user has installed. - ENV["PYTHONHOME"] = nil - ENV["PYTHONPATH"] = nil - - xy = (buildpath/"configure.ac").read.slice(/PYTHON_VERSION, (3\.\d)/, 1) - lib_cellar = prefix/"Frameworks/Python.framework/Versions/#{xy}/lib/python#{xy}" - - args = %W[ - --prefix=#{prefix} - --enable-ipv6 - --datarootdir=#{share} - --datadir=#{share} - --enable-framework=#{frameworks} - --enable-loadable-sqlite-extensions - --without-ensurepip - --with-dtrace - ] - - args << "--without-gcc" if ENV.compiler == :clang - - cflags = [] - ldflags = [] - cppflags = [] - - if MacOS.sdk_path_if_needed - # Help Python's build system (setuptools/pip) to build things on SDK-based systems - # The setup.py looks at "-isysroot" to get the sysroot (and not at --sysroot) - cflags << "-isysroot #{MacOS.sdk_path}" - ldflags << "-isysroot #{MacOS.sdk_path}" - - if DevelopmentTools.clang_build_version < 1000 - cflags << "-I/usr/include" # find zlib - end - - # For the Xlib.h, Python needs this header dir with the system Tk - # Yep, this needs the absolute path where zlib needed a path relative - # to the SDK. - cflags << "-I#{MacOS.sdk_path}/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers" - end - # Avoid linking to libgcc https://mail.python.org/pipermail/python-dev/2012-February/116205.html - args << "MACOSX_DEPLOYMENT_TARGET=#{MacOS.version.to_f}" - - # We want our readline and openssl@1.1! This is just to outsmart the detection code, - # superenv makes cc always find includes/libs! - inreplace "setup.py" do |s| - s.gsub! "do_readline = self.compiler.find_library_file(lib_dirs, 'readline')", - "do_readline = '#{Formula["readline"].opt_lib}/libhistory.dylib'" - s.gsub! "/usr/local/ssl", Formula["openssl@1.1"].opt_prefix - end - - inreplace "setup.py" do |s| - s.gsub! "sqlite_setup_debug = False", "sqlite_setup_debug = True" - s.gsub! "for d_ in inc_dirs + sqlite_inc_paths:", - "for d_ in ['#{Formula["sqlite"].opt_include}']:" - end - - # Allow python modules to use ctypes.find_library to find homebrew's stuff - # even if homebrew is not a /usr/local/lib. Try this with: - # `brew install enchant && pip install pyenchant` - inreplace "./Lib/ctypes/macholib/dyld.py" do |f| - f.gsub! "DEFAULT_LIBRARY_FALLBACK = [", "DEFAULT_LIBRARY_FALLBACK = [ '#{HOMEBREW_PREFIX}/lib'," - f.gsub! "DEFAULT_FRAMEWORK_FALLBACK = [", "DEFAULT_FRAMEWORK_FALLBACK = [ '#{HOMEBREW_PREFIX}/Frameworks'," - end - - args << "CFLAGS=#{cflags.join(" ")}" unless cflags.empty? - args << "LDFLAGS=#{ldflags.join(" ")}" unless ldflags.empty? - args << "CPPFLAGS=#{cppflags.join(" ")}" unless cppflags.empty? - - system "./configure", *args - system "make" - - ENV.deparallelize do - # Tell Python not to install into /Applications (default for framework builds) - system "make", "altinstall", "PYTHONAPPSDIR=#{prefix}" - system "make", "frameworkinstallextras", "PYTHONAPPSDIR=#{pkgshare}" - end - - # Any .app get a " 3" attached, so it does not conflict with python 2.x. - Dir.glob("#{prefix}/*.app") { |app| mv app, app.sub(/\.app$/, " 3.6.app") } - - # Prevent third-party packages from building against fragile Cellar paths - inreplace Dir[lib_cellar/"**/_sysconfigdata_m_darwin_darwin.py", - lib_cellar/"config*/Makefile", - frameworks/"Python.framework/Versions/3*/lib/pkgconfig/python-3.?.pc"], - prefix, opt_prefix - - # Help third-party packages find the Python framework - inreplace Dir[lib_cellar/"config*/Makefile"], - /^LINKFORSHARED=(.*)PYTHONFRAMEWORKDIR(.*)/, - "LINKFORSHARED=\\1PYTHONFRAMEWORKINSTALLDIR\\2" - - # Fix for https://github.com/Homebrew/homebrew-core/issues/21212 - inreplace Dir[lib_cellar/"**/_sysconfigdata_m_darwin_darwin.py"], - %r{('LINKFORSHARED': .*?)'(Python.framework/Versions/3.\d+/Python)'}m, - "\\1'#{opt_prefix}/Frameworks/\\2'" - - # A fix, because python and python3 both want to install Python.framework - # and therefore we can't link both into HOMEBREW_PREFIX/Frameworks - # https://github.com/Homebrew/homebrew/issues/15943 - ["Headers", "Python", "Resources"].each { |f| rm(prefix/"Frameworks/Python.framework/#{f}") } - rm prefix/"Frameworks/Python.framework/Versions/Current" - - # Symlink the pkgconfig files into HOMEBREW_PREFIX so they're accessible. - (lib/"pkgconfig").install_symlink Dir["#{frameworks}/Python.framework/Versions/#{xy}/lib/pkgconfig/*"] - - # Remove the site-packages that Python created in its Cellar. - (prefix/"Frameworks/Python.framework/Versions/#{xy}/lib/python#{xy}/site-packages").rmtree - - %w[setuptools pip wheel].each do |r| - (libexec/r).install resource(r) - end - - # Remove wheel test data. - # It's for people editing wheel and contains binaries which fail `brew linkage`. - rm libexec/"wheel/tox.ini" - rm_r libexec/"wheel/tests" - end - - def post_install - ENV.delete "PYTHONPATH" - - xy = (prefix/"Frameworks/Python.framework/Versions").children.min.basename.to_s - site_packages = HOMEBREW_PREFIX/"lib/python#{xy}/site-packages" - site_packages_cellar = prefix/"Frameworks/Python.framework/Versions/#{xy}/lib/python#{xy}/site-packages" - - # Fix up the site-packages so that user-installed Python software survives - # minor updates, such as going from 3.3.2 to 3.3.3: - - # Create a site-packages in HOMEBREW_PREFIX/lib/python#{xy}/site-packages - site_packages.mkpath - - # Symlink the prefix site-packages into the cellar. - site_packages_cellar.unlink if site_packages_cellar.exist? - site_packages_cellar.parent.install_symlink site_packages - - # Write our sitecustomize.py - rm_rf Dir["#{site_packages}/sitecustomize.py[co]"] - (site_packages/"sitecustomize.py").atomic_write(sitecustomize) - - # Remove old setuptools installations that may still fly around and be - # listed in the easy_install.pth. This can break setuptools build with - # zipimport.ZipImportError: bad local file header - # setuptools-0.9.8-py3.3.egg - rm_rf Dir["#{site_packages}/setuptools*"] - rm_rf Dir["#{site_packages}/distribute*"] - rm_rf Dir["#{site_packages}/pip[-_.][0-9]*", "#{site_packages}/pip"] - - %w[setuptools pip wheel].each do |pkg| - (libexec/pkg).cd do - system bin/"python3.6", "-s", "setup.py", "--no-user-cfg", "install", - "--force", "--verbose", "--install-scripts=#{bin}", - "--install-lib=#{site_packages}", - "--single-version-externally-managed", - "--record=installed.txt" - end - end - - rm_rf [bin/"pip"] - mv bin/"wheel", bin/"wheel3" - - # Install unversioned symlinks in libexec/bin. - { - "pip" => "pip3", - "wheel" => "wheel3", - }.each do |unversioned_name, versioned_name| - (libexec/"bin").install_symlink (bin/versioned_name).realpath => unversioned_name - end - - # post_install happens after link - %W[pip#{xy}].each do |e| - (HOMEBREW_PREFIX/"bin").install_symlink bin/e - end - - # Help distutils find brewed stuff when building extensions - include_dirs = [HOMEBREW_PREFIX/"include", Formula["openssl@1.1"].opt_include, - Formula["sqlite"].opt_include] - library_dirs = [HOMEBREW_PREFIX/"lib", Formula["openssl@1.1"].opt_lib, - Formula["sqlite"].opt_lib] - - cfg = prefix/"Frameworks/Python.framework/Versions/#{xy}/lib/python#{xy}/distutils/distutils.cfg" - - cfg.atomic_write <<~EOS - [install] - prefix=#{HOMEBREW_PREFIX} - - [build_ext] - include_dirs=#{include_dirs.join ":"} - library_dirs=#{library_dirs.join ":"} - EOS - end - - def sitecustomize - xy = (prefix/"Frameworks/Python.framework/Versions").children.min.basename.to_s - - <<~EOS - # This file is created by Homebrew and is executed on each python startup. - # Don't print from here, or else python command line scripts may fail! - # - import re - import os - import sys - - if sys.version_info[0] != 3: - # This can only happen if the user has set the PYTHONPATH for 3.x and run Python 2.x or vice versa. - # Every Python looks at the PYTHONPATH variable and we can't fix it here in sitecustomize.py, - # because the PYTHONPATH is evaluated after the sitecustomize.py. Many modules (e.g. PyQt4) are - # built only for a specific version of Python and will fail with cryptic error messages. - # In the end this means: Don't set the PYTHONPATH permanently if you use different Python versions. - exit('Your PYTHONPATH points to a site-packages dir for Python 3.x but you are running Python ' + - str(sys.version_info[0]) + '.x!\\n PYTHONPATH is currently: "' + str(os.environ['PYTHONPATH']) + '"\\n' + - ' You should `unset PYTHONPATH` to fix this.') - - # Only do this for a brewed python: - if os.path.realpath(sys.executable).startswith('#{rack}'): - # Shuffle /Library site-packages to the end of sys.path - library_site = '/Library/Python/#{xy}/site-packages' - library_packages = [p for p in sys.path if p.startswith(library_site)] - sys.path = [p for p in sys.path if not p.startswith(library_site)] - # .pth files have already been processed so don't use addsitedir - sys.path.extend(library_packages) - - # the Cellar site-packages is a symlink to the HOMEBREW_PREFIX - # site_packages; prefer the shorter paths - long_prefix = re.compile(r'#{rack}/[0-9\._abrc]+/Frameworks/Python\.framework/Versions/#{xy}/lib/python#{xy}/site-packages') - sys.path = [long_prefix.sub('#{HOMEBREW_PREFIX/"lib/python#{xy}/site-packages"}', p) for p in sys.path] - - # Set the sys.executable to use the opt_prefix, unless explicitly set - # with PYTHONEXECUTABLE: - if 'PYTHONEXECUTABLE' not in os.environ: - sys.executable = '#{opt_bin}/python#{xy}' - EOS - end - - def caveats - xy = if prefix.exist? - (prefix/"Frameworks/Python.framework/Versions").children.min.basename.to_s - else - version.to_s.slice(/(3\.\d)/) || "3.6" - end - <<~EOS - You can install Python packages with - pip3.6 install - - They will install into the site-package directory - #{HOMEBREW_PREFIX/"lib/python#{xy}/site-packages"} - - See: https://docs.brew.sh/Homebrew-and-Python - EOS - end - - test do - xy = (prefix/"Frameworks/Python.framework/Versions").children.min.basename.to_s - # Check if sqlite is ok, because we build with --enable-loadable-sqlite-extensions - # and it can occur that building sqlite silently fails if OSX's sqlite is used. - system "#{bin}/python#{xy}", "-c", "import sqlite3" - # Check if some other modules import. Then the linked libs are working. - system "#{bin}/python#{xy}", "-c", "import tkinter; root = tkinter.Tk()" - system "#{bin}/python#{xy}", "-c", "import _gdbm" - system "#{bin}/python#{xy}", "-c", "import zlib" - system "#{bin}/python#{xy}", "-c", "import ssl" - system bin/"pip3.6", "list", "--format=columns" - end -end diff --git a/Formula/python@3.7.rb b/Formula/python@3.7.rb index 8fce643..4e5d9a3 100644 --- a/Formula/python@3.7.rb +++ b/Formula/python@3.7.rb @@ -1,8 +1,8 @@ class PythonAT37 < Formula desc "Interpreted, interactive, object-oriented programming language" homepage "https://www.python.org/" - url "https://www.python.org/ftp/python/3.7.11/Python-3.7.11.tar.xz" - sha256 "ddb4196ab5c4f69e895920a422cb60d42b46e2de2b173ce7fd57f1435459a734" + url "https://www.python.org/ftp/python/3.7.13/Python-3.7.13.tar.xz" + sha256 "99f106275df8899c3e8cb9d7c01ce686c202ef275953301427194693de5bef84" license "Python-2.0" livecheck do @@ -11,8 +11,8 @@ class PythonAT37 < Formula end bottle do - root_url "https://github.com/sashkab/homebrew-python/releases/download/python@3.7-3.7.11" - sha256 catalina: "c7345395511e0076758b82118aebbd9ddd11d14312869ec1645f440d40adf922" + root_url "https://github.com/sashkab/homebrew-python/releases/download/python@3.7-3.7.13" + sha256 big_sur: "7072206b88d699502effefe8bf79f90abda7396a50fbfc3a8975f3d6ec00fad9" end # setuptools remembers the build flags python is built with and uses them to @@ -44,18 +44,18 @@ class PythonAT37 < Formula skip_clean "bin/pip3", "bin/pip-3.4", "bin/pip-3.5", "bin/pip-3.6", "bin/pip-3.7" resource "setuptools" do - url "https://pypi.org/packages/source/s/setuptools/setuptools-57.0.0.tar.gz" - sha256 "401cbf33a7bf817d08014d51560fc003b895c4cdc1a5b521ad2969e928a07535" + url "https://pypi.org/packages/source/s/setuptools/setuptools-60.10.0.tar.gz" + sha256 "6599055eeb23bfef457d5605d33a4d68804266e6cb430b0fb12417c5efeae36c" end resource "pip" do - url "https://www.pypi.org/packages/source/p/pip/pip-21.1.2.tar.gz" - sha256 "eb5df6b9ab0af50fe1098a52fd439b04730b6e066887ff7497357b9ebd19f79b" + url "https://www.pypi.org/packages/source/p/pip/pip-22.0.4.tar.gz" + sha256 "b3a9de2c6ef801e9247d1527a4b16f92f2cc141cd1489f3fffaf6a9e96729764" end resource "wheel" do - url "https://pypi.org/packages/source/w/wheel/wheel-0.36.2.tar.gz" - sha256 "e11eefd162658ea59a60a0f6c7d493a7190ea4b9a85e335b33489d9f17e0245e" + url "https://pypi.org/packages/source/w/wheel/wheel-0.37.1.tar.gz" + sha256 "e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4" end def install diff --git a/Formula/python@3.8.rb b/Formula/python@3.8.rb index 8ae534e..2ddc3ff 100644 --- a/Formula/python@3.8.rb +++ b/Formula/python@3.8.rb @@ -1,8 +1,8 @@ class PythonAT38 < Formula desc "Interpreted, interactive, object-oriented programming language" homepage "https://www.python.org/" - url "https://www.python.org/ftp/python/3.8.12/Python-3.8.12.tar.xz" - sha256 "b1d3a76420375343b5e8a22fceb1ac65b77193e9ed27146524f0a9db058728ea" + url "https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz" + sha256 "6f309077012040aa39fe8f0c61db8c0fa1c45136763299d375c9e5756f09cf57" license "Python-2.0" livecheck do @@ -11,9 +11,8 @@ class PythonAT38 < Formula end bottle do - root_url "https://github.com/sashkab/homebrew-python/releases/download/python@3.8-3.8.12" - rebuild 1 - sha256 catalina: "b1d64ddeadc58543d0050ff609f709a48fcdaf9ca7ecf149e27f32e35773af69" + root_url "https://github.com/sashkab/homebrew-python/releases/download/python@3.8-3.8.13" + sha256 big_sur: "5f1ca2a717b4af81a7ad113dfce042d5c0d6df5d0994851b35a6da8a0648d730" end # setuptools remembers the build flags python is built with and uses them to @@ -43,18 +42,18 @@ class PythonAT38 < Formula "bin/easy_install-3.7", "bin/easy_install-3.8" resource "setuptools" do - url "https://pypi.org/packages/source/s/setuptools/setuptools-58.0.3.tar.gz" - sha256 "5e4c36f55012a46c1b3e4b67a8236d1d73856a90fc7b3207d29bedb7d2bac417" + url "https://pypi.org/packages/source/s/setuptools/setuptools-60.10.0.tar.gz" + sha256 "6599055eeb23bfef457d5605d33a4d68804266e6cb430b0fb12417c5efeae36c" end resource "pip" do - url "https://www.pypi.org/packages/source/p/pip/pip-21.2.4.tar.gz" - sha256 "0eb8a1516c3d138ae8689c0c1a60fde7143310832f9dc77e11d8a4bc62de193b" + url "https://www.pypi.org/packages/source/p/pip/pip-22.0.4.tar.gz" + sha256 "b3a9de2c6ef801e9247d1527a4b16f92f2cc141cd1489f3fffaf6a9e96729764" end resource "wheel" do - url "https://pypi.org/packages/source/w/wheel/wheel-0.37.0.tar.gz" - sha256 "e2ef7239991699e3355d54f8e968a21bb940a1dbf34a4d226741e64462516fad" + url "https://pypi.org/packages/source/w/wheel/wheel-0.37.1.tar.gz" + sha256 "e9a504e793efbca1b8e0e9cb979a249cf4a0a7b5b8c9e8b65a5e39d49529c1c4" end # Link against libmpdec.so.3, update for mpdecimal.h symbol cleanup. diff --git a/README.md b/README.md index 39fd0c6..abe7e02 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,12 @@ This [Homebrew](http://brew.sh) tap provides formulae to install multiple Python Python Version | Latest revision ---------------|---------------- -Python 3.6 | 3.6.14 -Python 3.7 | 3.7.11 -Python 3.8 | 3.8.12 +Python 3.7 | 3.7.13 +Python 3.8 | 3.8.13 ## Installing formulae -Replace `X` in examples below with minor version of Python -- `5` for Python 3.5, `6` for Python 3.6, `7` for Python 3.7, or `8` for Python 3.8. +Replace `X` in examples below with minor version of Python -- `7` for Python 3.7, or `8` for Python 3.8. Python 3.X will be installed into `/usr/local/opt/python@3.X`, as a keg, i.e without linking into `/usr/local/bin` in order to avoid conflicts with the python formulae. @@ -32,10 +31,16 @@ In order to update to latest version of `pip`, `setuptools` and `wheel`, use fol /usr/local/opt/python@3.X/bin/python3.X -mpip install -U pip setuptools wheel ``` -## Python 2.7 +## Deprecations + +### Python 2.7 Python 2.7 has been removed from this repository in early January 2020 after it reached end-of-life. See #46 for details. +### Python 3.6 + +Python 3.6 has been removed from this repository in March 2022 after it reached end-of-life. + ## Acknowledgement This repository started as a fork of the [zoidbergwill/homebrew-python][1]. diff --git a/formula_renames.json b/formula_renames.json index 4378fb0..d486d70 100644 --- a/formula_renames.json +++ b/formula_renames.json @@ -1,4 +1,3 @@ { - "python36": "python@3.6", "python37": "python@3.7" }