mirror of
https://github.com/psycopg/psycopg2.git
synced 2024-11-22 17:06:33 +03:00
Merge branch 'build-macos-arm64'
This commit is contained in:
commit
f07b3ad0a6
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -15,3 +15,4 @@ env?
|
||||||
/rel
|
/rel
|
||||||
/wheels
|
/wheels
|
||||||
/packages
|
/packages
|
||||||
|
/wheelhouse
|
||||||
|
|
80
scripts/build/build_macos_arm64.sh
Executable file
80
scripts/build/build_macos_arm64.sh
Executable file
|
@ -0,0 +1,80 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Build psycopg2-binary wheel packages for Apple M1 (cpNNN-macosx_arm64)
|
||||||
|
#
|
||||||
|
# This script is designed to run on Scaleway Apple Silicon machines.
|
||||||
|
#
|
||||||
|
# The script cannot be run as sudo (installing brew fails), but requires sudo,
|
||||||
|
# so it can pretty much only be executed by a sudo user as it is.
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
set -x
|
||||||
|
|
||||||
|
python_versions="3.8.10 3.9.13 3.10.5"
|
||||||
|
postgres_version=14
|
||||||
|
|
||||||
|
# Move to the root of the project
|
||||||
|
dir="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||||
|
cd "${dir}/../../"
|
||||||
|
|
||||||
|
# Add /usr/local/bin to the path. It seems it's not, in non-interactive sessions
|
||||||
|
if ! (echo $PATH | grep -q '/usr/local/bin'); then
|
||||||
|
export PATH=/usr/local/bin:$PATH
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install brew, if necessary. Otherwise just make sure it's in the path
|
||||||
|
if [[ -x /opt/homebrew/bin/brew ]]; then
|
||||||
|
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||||
|
else
|
||||||
|
command -v brew > /dev/null || (
|
||||||
|
# Not necessary: already installed
|
||||||
|
# xcode-select --install
|
||||||
|
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL \
|
||||||
|
https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
|
||||||
|
)
|
||||||
|
eval "$(/opt/homebrew/bin/brew shellenv)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Install PostgreSQL, if necessary
|
||||||
|
command -v pg_config > /dev/null || (
|
||||||
|
brew install postgresql@${postgres_version}
|
||||||
|
brew services start postgresql
|
||||||
|
)
|
||||||
|
|
||||||
|
# Install the Python versions we want to build
|
||||||
|
for ver3 in $python_versions; do
|
||||||
|
ver2=$(echo $ver3 | sed 's/\([^\.]*\)\(\.[^\.]*\)\(.*\)/\1\2/')
|
||||||
|
command -v python${ver2} > /dev/null || (
|
||||||
|
(cd /tmp &&
|
||||||
|
curl -fsSl -O \
|
||||||
|
https://www.python.org/ftp/python/${ver3}/python-${ver3}-macos11.pkg)
|
||||||
|
sudo installer -pkg /tmp/python-${ver3}-macos11.pkg -target /
|
||||||
|
)
|
||||||
|
done
|
||||||
|
|
||||||
|
# Create a virtualenv where to work
|
||||||
|
if [[ ! -x .venv/bin/python ]]; then
|
||||||
|
python3 -m venv .venv
|
||||||
|
fi
|
||||||
|
|
||||||
|
source .venv/bin/activate
|
||||||
|
pip install cibuildwheel
|
||||||
|
|
||||||
|
# Build the binary packages
|
||||||
|
export CIBW_PLATFORM=macos
|
||||||
|
export CIBW_ARCHS=arm64
|
||||||
|
export CIBW_BUILD='cp{38,39,310}-*'
|
||||||
|
export CIBW_TEST_COMMAND='python -c "import tests; tests.unittest.main(defaultTest=\"tests.test_suite\")"'
|
||||||
|
|
||||||
|
export PSYCOPG2_TESTDB=postgres
|
||||||
|
export PYTHONPATH=$(pwd)
|
||||||
|
|
||||||
|
# For some reason, cibuildwheel tests says that psycopg2 is already installed,
|
||||||
|
# refuses to install, then promptly fails import. So, please, seriously,
|
||||||
|
# install this thing.
|
||||||
|
export PIP_FORCE_REINSTALL=1
|
||||||
|
|
||||||
|
# Replace the package name
|
||||||
|
sed -i .bak 's/^setup(name="psycopg2"/setup(name="psycopg2-binary"/' setup.py
|
||||||
|
|
||||||
|
cibuildwheel
|
40
scripts/build/run_build_macos_arm64.sh
Executable file
40
scripts/build/run_build_macos_arm64.sh
Executable file
|
@ -0,0 +1,40 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Build psycopg2-binary wheel packages for Apple M1 (cpNNN-macosx_arm64)
|
||||||
|
#
|
||||||
|
# This script is designed to run on a local machine: it will clone the repos
|
||||||
|
# remotely and execute the `build_macos_arm64.sh` script remotely, then will
|
||||||
|
# download the built packages. A tag to build must be specified.
|
||||||
|
#
|
||||||
|
# In order to run the script, the `m1` host must be specified in
|
||||||
|
# `~/.ssh/config`; for instance:
|
||||||
|
#
|
||||||
|
# Host m1
|
||||||
|
# User m1
|
||||||
|
# HostName 1.2.3.4
|
||||||
|
|
||||||
|
set -euo pipefail
|
||||||
|
# set -x
|
||||||
|
|
||||||
|
tag=${1:-}
|
||||||
|
|
||||||
|
if [[ ! "${tag}" ]]; then
|
||||||
|
echo "Usage: $0 TAG" >&2
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
rdir=psycobuild
|
||||||
|
|
||||||
|
# Clone the repos
|
||||||
|
ssh m1 rm -rf "${rdir}"
|
||||||
|
ssh m1 git clone https://github.com/psycopg/psycopg2.git --branch ${tag} "${rdir}"
|
||||||
|
|
||||||
|
# Allow sudoing without password, to allow brew to install
|
||||||
|
ssh -t m1 bash -c \
|
||||||
|
'test -f /etc/sudoers.d/m1 || echo "m1 ALL=(ALL) NOPASSWD:ALL" | sudo tee /etc/sudoers.d/m1'
|
||||||
|
|
||||||
|
# Build the wheel packages
|
||||||
|
ssh m1 "${rdir}/scripts/build/build_macos_arm64.sh"
|
||||||
|
|
||||||
|
# Transfer the packages locally
|
||||||
|
scp -r "m1:${rdir}/wheelhouse" .
|
|
@ -379,6 +379,12 @@ class CursorTests(ConnectingTestCase):
|
||||||
@skip_before_postgres(8, 2)
|
@skip_before_postgres(8, 2)
|
||||||
def test_rowcount_on_executemany_returning(self):
|
def test_rowcount_on_executemany_returning(self):
|
||||||
cur = self.conn.cursor()
|
cur = self.conn.cursor()
|
||||||
|
try:
|
||||||
|
cur.execute("drop table execmany")
|
||||||
|
self.conn.commit()
|
||||||
|
except psycopg2.DatabaseError:
|
||||||
|
self.conn.rollback()
|
||||||
|
|
||||||
cur.execute("create table execmany(id serial primary key, data int)")
|
cur.execute("create table execmany(id serial primary key, data int)")
|
||||||
cur.executemany(
|
cur.executemany(
|
||||||
"insert into execmany (data) values (%s)",
|
"insert into execmany (data) values (%s)",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user