diff --git a/Formula/python@3.6.rb b/Formula/python@3.6.rb deleted file mode 100644 index 2ad0a4a..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.13/Python-3.6.13.tar.xz" - sha256 "a47a43a53abb42286a2c11965343ff56711b9e64e8d11bf2c6701a4fb8ce1a0f" - 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.13" - sha256 catalina: "5c09ac2b3105a674c1e3f9ea0289134f932f26b152e6713cd233fca2032f5fcb" - 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-53.0.0.tar.gz" - sha256 "1b18ef17d74ba97ac9c0e4b4265f123f07a8ae85d9cd093949fa056d3eeeead5" - end - - resource "pip" do - url "https://www.pypi.org/packages/source/p/pip/pip-21.0.1.tar.gz" - sha256 "99bbde183ec5ec037318e774b0d8ae0a64352fe53b2c7fd630be1d07e94f41e5" - 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 eb743b0..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.10/Python-3.7.10.tar.xz" - sha256 "f8d82e7572c86ec9d55c8627aae5040124fd2203af400c383c821b980306ee6b" + 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.10" - sha256 catalina: "9d491882b64f3c5287bffd6537ea3ecd0dfaa5f9b6c2f99c5418d75c8c3ca7de" + 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-53.0.0.tar.gz" - sha256 "1b18ef17d74ba97ac9c0e4b4265f123f07a8ae85d9cd093949fa056d3eeeead5" + 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.0.1.tar.gz" - sha256 "99bbde183ec5ec037318e774b0d8ae0a64352fe53b2c7fd630be1d07e94f41e5" + 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 a519f9e..2ddc3ff 100644 --- a/Formula/python@3.8.rb +++ b/Formula/python@3.8.rb @@ -1,10 +1,9 @@ class PythonAT38 < Formula desc "Interpreted, interactive, object-oriented programming language" homepage "https://www.python.org/" - url "https://www.python.org/ftp/python/3.8.10/Python-3.8.10.tar.xz" - sha256 "6af24a66093dd840bcccf371d4044a3027e655cf24591ce26e48022bc79219d9" + url "https://www.python.org/ftp/python/3.8.13/Python-3.8.13.tar.xz" + sha256 "6f309077012040aa39fe8f0c61db8c0fa1c45136763299d375c9e5756f09cf57" license "Python-2.0" - revision 1 livecheck do url "https://www.python.org/ftp/python/" @@ -12,8 +11,8 @@ class PythonAT38 < Formula end bottle do - root_url "https://github.com/sashkab/homebrew-python/releases/download/python@3.8-3.8.10_1" - sha256 catalina: "f1599b103842da9fc1aad9bde1a021ec534fe5551b20a446aa28c24811fa9609" + 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 @@ -35,23 +34,26 @@ class PythonAT38 < Formula uses_from_macos "libffi" uses_from_macos "ncurses" uses_from_macos "unzip" + uses_from_macos "xz" uses_from_macos "zlib" skip_clean "bin/pip3", "bin/pip-3.4", "bin/pip-3.5", "bin/pip-3.6", "bin/pip-3.7", "bin/pip-3.8" + skip_clean "bin/easy_install3", "bin/easy_install-3.4", "bin/easy_install-3.5", "bin/easy_install-3.6", + "bin/easy_install-3.7", "bin/easy_install-3.8" 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 # Link against libmpdec.so.3, update for mpdecimal.h symbol cleanup. @@ -60,6 +62,19 @@ class PythonAT38 < Formula sha256 "104083617f086375974908f619369cd64005d5ffc314038c31b8b49032280148" end + def lib_cellar + prefix/"Frameworks/Python.framework/Versions/#{version.major_minor}/lib/python#{version.major_minor}" + end + + def site_packages_cellar + lib_cellar/"site-packages" + end + + # The HOMEBREW_PREFIX location of site-packages. + def site_packages + HOMEBREW_PREFIX/"lib/python#{version.major_minor}/site-packages" + 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. @@ -67,13 +82,10 @@ def install ENV["PYTHONPATH"] = nil # Override the auto-detection in setup.py, which assumes a universal build. - on_macos do + if OS.mac? ENV["PYTHON_DECIMAL_WITH_MACHINE"] = Hardware::CPU.arm? ? "uint128" : "x64" end - 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 @@ -87,18 +99,25 @@ def install --with-system-libmpdec ] - cflags = ["-I#{HOMEBREW_PREFIX}/include"] - ldflags = ["-L#{HOMEBREW_PREFIX}/lib"] - cppflags = ["-I#{HOMEBREW_PREFIX}/include"] + # Python re-uses flags when building native modules. + # Since we don't want native modules prioritizing the brew + # include path, we move them to [C|LD]FLAGS_NODIST. + # Note: Changing CPPFLAGS causes issues with dbm, so we + # leave it as-is. + cflags = [] + cflags_nodist = ["-I#{HOMEBREW_PREFIX}/include"] + ldflags = [] + ldflags_nodist = ["-L#{HOMEBREW_PREFIX}/lib", "-Wl,-rpath,#{HOMEBREW_PREFIX}/lib"] + cppflags = ["-I#{HOMEBREW_PREFIX}/include"] 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}" << "-I#{MacOS.sdk_path}/usr/include" + cflags << "-isysroot #{MacOS.sdk_path}" ldflags << "-isysroot #{MacOS.sdk_path}" end # Avoid linking to libgcc https://mail.python.org/pipermail/python-dev/2012-February/116205.html - args << "MACOSX_DEPLOYMENT_TARGET=#{MacOS.version.to_f}" + args << "MACOSX_DEPLOYMENT_TARGET=#{MacOS.version}" args << "--with-tcltk-includes=-I#{Formula["tcl-tk"].opt_include}" args << "--with-tcltk-libs=-L#{Formula["tcl-tk"].opt_lib} -ltcl8.6 -ltk8.6" @@ -107,7 +126,7 @@ def install # superenv makes cc always find includes/libs! inreplace "setup.py", "do_readline = self.compiler.find_library_file(self.lib_dirs, 'readline')", - "do_readline = '#{Formula["readline"].opt_lib}/libhistory.dylib'" + "do_readline = '#{Formula["readline"].opt_lib}/#{shared_library("libhistory")}'" inreplace "setup.py" do |s| s.gsub! "sqlite_setup_debug = False", "sqlite_setup_debug = True" @@ -125,7 +144,9 @@ def install end args << "CFLAGS=#{cflags.join(" ")}" unless cflags.empty? + args << "CFLAGS_NODIST=#{cflags_nodist.join(" ")}" unless cflags_nodist.empty? args << "LDFLAGS=#{ldflags.join(" ")}" unless ldflags.empty? + args << "LDFLAGS_NODIST=#{ldflags_nodist.join(" ")}" unless ldflags_nodist.empty? args << "CPPFLAGS=#{cppflags.join(" ")}" unless cppflags.empty? system "./configure", *args @@ -157,10 +178,10 @@ def install "\\1'#{opt_prefix}/Frameworks/\\2'" # Symlink the pkgconfig files into HOMEBREW_PREFIX so they're accessible. - (lib/"pkgconfig").install_symlink Dir["#{frameworks}/Python.framework/Versions/#{xy}/lib/pkgconfig/*"] + (lib/"pkgconfig").install_symlink Dir["#{frameworks}/Python.framework/Versions/#{version.major_minor}/lib/pkgconfig/*"] # Remove the site-packages that Python created in its Cellar. - (prefix/"Frameworks/Python.framework/Versions/#{xy}/lib/python#{xy}/site-packages").rmtree + site_packages_cellar.rmtree %w[setuptools pip wheel].each do |r| (libexec/r).install resource(r) @@ -185,14 +206,10 @@ def install 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 + # Create a site-packages in HOMEBREW_PREFIX/lib/python#{version.major_minor}/site-packages site_packages.mkpath # Symlink the prefix site-packages into the cellar. @@ -221,7 +238,7 @@ def post_install end end - rm_rf [bin/"pip"] + rm_rf [bin/"pip", bin/"easy_install"] mv bin/"wheel", bin/"wheel3" # Create symlink python3 -> python3.8 (due to use of altinstall and conflict with python@3.8 formulae) @@ -241,7 +258,7 @@ def post_install library_dirs = [HOMEBREW_PREFIX/"lib", Formula["openssl@1.1"].opt_lib, Formula["sqlite"].opt_lib], Formula["tcl-tk"].opt_lib - cfg = prefix/"Frameworks/Python.framework/Versions/#{xy}/lib/python#{xy}/distutils/distutils.cfg" + cfg = lib_cellar/"distutils/distutils.cfg" cfg.atomic_write <<~EOS [install] @@ -253,8 +270,6 @@ def post_install 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! @@ -274,53 +289,51 @@ def sitecustomize # 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_site = '/Library/Python/#{version.major_minor}/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] + long_prefix = re.compile(r'#{rack}/[0-9\._abrc]+/Frameworks/Python\.framework/Versions/#{version.major_minor}/lib/python#{version.major_minor}/site-packages') + sys.path = [long_prefix.sub('#{HOMEBREW_PREFIX/"lib/python#{version.major_minor}/site-packages"}', p) for p in sys.path] # Set the sys.executable to use the opt_prefix. Only do this if PYTHONEXECUTABLE is not # explicitly set and we are not in a virtualenv: if 'PYTHONEXECUTABLE' not in os.environ and sys.prefix == sys.base_prefix: - sys.executable = '#{opt_bin}/python#{xy}' + sys.executable = '#{opt_bin}/python#{version.major_minor}' 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.8" - end <<~EOS Python has been installed as #{opt_bin}/python3.8 + Unversioned symlinks `python`, `python-config`, `pip` etc. pointing to + `python3`, `python3-config`, `pip3` etc., respectively, have been installed into + #{opt_libexec}/bin + You can install Python packages with - #{opt_bin}/pip3.8 install + #{opt_bin}/pip3 install They will install into the site-package directory - #{prefix/"Frameworks/Python.framework/Versions/#{xy}/lib/python#{xy}/site-packages"} + #{HOMEBREW_PREFIX/"lib/python#{version.major_minor}/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" + system "#{bin}/python#{version.major_minor}", "-c", "import sqlite3" # Check if some other modules import. Then the linked libs are working. - system "#{bin}/python#{xy}", "-c", "import _decimal" - system "#{bin}/python#{xy}", "-c", "import tkinter; root = tkinter.Tk()" + system "#{bin}/python#{version.major_minor}", "-c", "import _decimal" + system "#{bin}/python#{version.major_minor}", "-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.8", "list", "--format=columns" + system "#{bin}/python#{version.major_minor}", "-c", "import _gdbm" + system "#{bin}/python#{version.major_minor}", "-c", "import zlib" + system "#{bin}/python#{version.major_minor}", "-c", "import ssl" + system "#{bin}/pip#{version.major_minor}", "list", "--format=columns" end end diff --git a/README.md b/README.md index f922654..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.13 -Python 3.7 | 3.7.10 -Python 3.8 | 3.8.10 +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" }