diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f893b4e --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +.DS_Store +minimal/* +no_customization/* +opionated/* +recommended/* diff --git a/README.md b/README.md index bef7c17..3868f2f 100644 --- a/README.md +++ b/README.md @@ -1 +1,48 @@ -# python \ No newline at end of file +# python +A Python framework that installs to `/Library/frameworks/Python.framework`. + +This is an intended replacement for when Apple removes `/usr/bin/python` + +## Notes +To decrease complexity, only a _single_ package may be installed at any given time on a machine. + +# Flavors of Python +We currently offer four versions of Python. You can chose which version suits your needs. + +## Minimal +This is a Python.framework that includes `xattr` and `PyObjc` - the original intent of Relocatable Python. + +Tools that should work +- vfuse +- dockutil (python 3 pull request [here](https://github.com/kcrawford/dockutil/pull/87)) +- outset + +## No Customization +This is a Python.framework that contains everything from the official Python package and nothing more. + +Many open source tools will not work with this, but it may be helpful for development purposes. + +## Recommended +This is a Python.framework that contains everything from minimal, and a few libraries that various well known open source projects require. + +Tools that should work: +- autopkg +- InstallApplications +- munki +- munki-pkg +- munki-facts (python 3 pull request [here](https://github.com/munki/munki-facts/pull/17)) +- nudge +- UMAD + +## Opionated +This is a Python.framework that contains everything from Recommended, and libraries that various open source projects require. + +This is a **kitchen sink** approach, opting for the latest known packages. + +Tools that should work: +- Gusto's autopkg promotion tool +- Munki CloudFront Middleware +- Python-jss + +# Updating packages +This should be done in a clean virtual environment. After every python package install, you can run `pip freeze | xargs pip uninstall -y` to cleanup the environment. diff --git a/build_python_framework_pkgs.zsh b/build_python_framework_pkgs.zsh new file mode 100755 index 0000000..d4200cd --- /dev/null +++ b/build_python_framework_pkgs.zsh @@ -0,0 +1,150 @@ +#!/bin/zsh +# +# Build script for Python 3 frameworks +# Adaptd from https://github.com/munki/munki/blob/Munki3dev/code/tools/build_python_framework.sh +# IMPORTANT +# Run this with your current directory being the path where this script is located + +# Harcoded versions +PYTHON_VERSION=3.8.3 +RP_SHA="8bce58e91895978da6f238c1d2e1de3559ea4643" +MP_SHA="71c57fcfdf43692adcd41fa7305be08f66bae3e5" + +# Sanity Checks +## Type Check +if [ -n "$1" ]; then + if [[ "$1" == 'minimal' ]]; then + TYPE=$1 + elif [[ "$1" == "no_customization" ]]; then + TYPE=$1 + elif [[ "$1" == "opionated" ]]; then + TYPE=$1 + elif [[ "$1" == 'recommended' ]]; then + TYPE=$1 + else + echo "Specified positional argument other than opionated or recommended. Using minimal workflow" + TYPE='minimal' + fi +else + echo "runner.zsh" + echo "" + echo " Configures Relocatable Python" + echo " Options:" + echo " minimal" + echo " Identical to the original relocatable python code" + echo "" + echo " no_customization" + echo " A python framework without any customizations" + echo "" + echo " recommended" + echo " A python framework with libraries for commonly used tools like autopkg and munki" + echo "" + echo " opionated" + echo " A python framework with libraries for as many macadmin tools as possible" + exit 1 +fi +## Root Check +if [[ $(/usr/bin/id -u) -ne 0 ]]; then + echo "This tool requires elevated access to run" + exit 1 +fi + +# Variables +DATE=$(/bin/date -u "+%m%d%Y%H%M%S") +TOOLSDIR=$(dirname $0) +CONSOLEUSER=$(/usr/bin/stat -f "%Su" /dev/console) +FRAMEWORKDIR="/Library/frameworks" +RP_BINDIR="/tmp/relocatable-python" +RP_ZIP="/tmp/relocatable-python.zip" +MP_BINDIR="/tmp/munki-pkg" +MP_ZIP="/tmp/munki-pkg.zip" +echo "Creating Python Framework - $TYPE" + +# Create framework path if not present +if [ ! -d "${FRAMEWORKDIR}" ]; then + /usr/bin/sudo /bin/mkdir -p "${FRAMEWORKDIR}" +fi + +# remove existing library Python.framework if present +if [ -d "${FRAMEWORKDIR}/Python.framework" ]; then + /usr/bin/sudo /bin/rm -rf "${FRAMEWORKDIR}/Python.framework" +fi + +# Download specific version of relocatable-python +echo "Downloading relocatable-python tool from github..." +if [ -f "${RP_ZIP}" ]; then + /usr/bin/sudo /bin/rm -rf ${RP_ZIP} +fi +/usr/bin/curl https://github.com/gregneagle/relocatable-python/archive/${RP_SHA}.zip -L -o ${RP_ZIP} +if [ -d ${RP_BINDIR} ]; then + /usr/bin/sudo /bin/rm -rf ${RP_BINDIR} +fi +/usr/bin/unzip ${RP_ZIP} -d ${RP_BINDIR} +DL_RESULT="$?" +if [ "${DL_RESULT}" != "0" ]; then + echo "Error downloading relocatable-python tool: ${DL_RESULT}" 1>&2 + exit 1 +fi + +# remove existing Python package folder +if [ -d "$TOOLSDIR/$TYPE" ]; then + /bin/rm -rf "$TOOLSDIR/$TYPE" + /bin/mkdir -p "$TOOLSDIR/$TYPE/payload/${FRAMEWORKDIR}" + /usr/bin/sudo /usr/sbin/chown -R ${CONSOLEUSER}:wheel "$TOOLSDIR/$TYPE" +else + /bin/mkdir -p "$TOOLSDIR/$TYPE/payload/${FRAMEWORKDIR}" + /usr/bin/sudo /usr/sbin/chown -R ${CONSOLEUSER}:wheel "$TOOLSDIR/$TYPE" +fi + +# build the framework +RP_EXTRACT_BINDIR="${RP_BINDIR}/relocatable-python-${RP_SHA}" +/usr/bin/sudo "${RP_EXTRACT_BINDIR}/make_relocatable_python_framework.py" \ +--python-version "${PYTHON_VERSION}" \ +--pip-requirements "${TOOLSDIR}/requirements_${TYPE}.txt" \ +--destination "${FRAMEWORKDIR}" + +RP_RESULT="$?" +if [ "${RP_RESULT}" != "0" ]; then + echo "Error running relocatable-python tool: ${RP_RESULT}" 1>&2 + exit 1 +fi + +# move the framework to the Python package folder +echo "Moving Python.framework to payload folder" +/usr/bin/sudo /bin/mv "${FRAMEWORKDIR}/Python.framework" "$TOOLSDIR/$TYPE/payload/${FRAMEWORKDIR}" + +# take ownership of the payload folder +echo "Taking ownership of the Payload directory" +/usr/bin/sudo /usr/sbin/chown -R ${CONSOLEUSER}:wheel "$TOOLSDIR/$TYPE" + +# Download specific version of munki-pkg +echo "Downloading munki-pkg tool from github..." +if [ -f "${MP_ZIP}" ]; then + /usr/bin/sudo /bin/rm -rf ${MP_ZIP} +fi +/usr/bin/curl https://github.com/munki/munki-pkg/archive/${MP_SHA}.zip -L -o ${MP_ZIP} +if [ -d ${MP_BINDIR} ]; then + /usr/bin/sudo /bin/rm -rf ${MP_BINDIR} +fi +/usr/bin/unzip ${MP_ZIP} -d ${MP_BINDIR} +DL_RESULT="$?" +if [ "${DL_RESULT}" != "0" ]; then + echo "Error downloading munki-pkg tool: ${DL_RESULT}" 1>&2 + exit 1 +fi + +# Create the json file for munki-pkg +/bin/cat << JSONFILE > "$TOOLSDIR/$TYPE/build-info.json" +{ + "ownership": "recommended", + "suppress_bundle_relocation": true, + "identifier": "org.macadmins.python.$TYPE", + "postinstall_action": "none", + "distribution_style": true, + "version": "$PYTHON_VERSION.$DATE", + "name": "python_$TYPE-$PYTHON_VERSION.$DATE.pkg", + "install_location": "/" +} +JSONFILE +# Create the pkg +"${MP_BINDIR}/munki-pkg-${MP_SHA}/munkipkg" "$TOOLSDIR/$TYPE" diff --git a/requirement_files/Sphinx.txt b/requirement_files/Sphinx.txt new file mode 100644 index 0000000..8d80c76 --- /dev/null +++ b/requirement_files/Sphinx.txt @@ -0,0 +1,24 @@ +alabaster==0.7.12 +Babel==2.8.0 +certifi==2020.4.5.2 +chardet==3.0.4 +docutils==0.16 +idna==2.9 +imagesize==1.2.0 +Jinja2==2.11.2 +MarkupSafe==1.1.1 +packaging==20.4 +Pygments==2.6.1 +pyparsing==2.4.7 +pytz==2020.1 +requests==2.23.0 +six==1.15.0 +snowballstemmer==2.0.0 +Sphinx==3.1.1 +sphinxcontrib-applehelp==1.0.2 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==1.0.3 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.4 +urllib3==1.25.9 diff --git a/requirement_files/arrow.txt b/requirement_files/arrow.txt new file mode 100644 index 0000000..7d99bef --- /dev/null +++ b/requirement_files/arrow.txt @@ -0,0 +1,3 @@ +arrow==0.15.6 +python-dateutil==2.8.1 +six==1.15.0 diff --git a/requirement_files/aspy.yaml.txt b/requirement_files/aspy.yaml.txt new file mode 100644 index 0000000..56a83a5 --- /dev/null +++ b/requirement_files/aspy.yaml.txt @@ -0,0 +1,2 @@ +aspy.yaml==1.3.0 +PyYAML==5.3.1 diff --git a/requirement_files/atomicwrites.txt b/requirement_files/atomicwrites.txt new file mode 100644 index 0000000..bbd249e --- /dev/null +++ b/requirement_files/atomicwrites.txt @@ -0,0 +1 @@ +atomicwrites==1.4.0 diff --git a/requirement_files/black.txt b/requirement_files/black.txt new file mode 100644 index 0000000..7f429c1 --- /dev/null +++ b/requirement_files/black.txt @@ -0,0 +1,8 @@ +appdirs==1.4.4 +attrs==19.3.0 +black==19.10b0 +click==7.1.2 +pathspec==0.8.0 +regex==2020.6.8 +toml==0.10.1 +typed-ast==1.4.1 diff --git a/requirement_files/boto.txt b/requirement_files/boto.txt new file mode 100644 index 0000000..a842ade --- /dev/null +++ b/requirement_files/boto.txt @@ -0,0 +1 @@ +boto==2.49.0 diff --git a/requirement_files/entrypoints.txt b/requirement_files/entrypoints.txt new file mode 100644 index 0000000..7a0b6e5 --- /dev/null +++ b/requirement_files/entrypoints.txt @@ -0,0 +1 @@ +entrypoints==0.3 diff --git a/requirement_files/flake8-bugbear.txt b/requirement_files/flake8-bugbear.txt new file mode 100644 index 0000000..08d3a47 --- /dev/null +++ b/requirement_files/flake8-bugbear.txt @@ -0,0 +1,6 @@ +attrs==19.3.0 +flake8==3.8.3 +flake8-bugbear==20.1.4 +mccabe==0.6.1 +pycodestyle==2.6.0 +pyflakes==2.2.0 diff --git a/requirement_files/flake8.txt b/requirement_files/flake8.txt new file mode 100644 index 0000000..1291fe1 --- /dev/null +++ b/requirement_files/flake8.txt @@ -0,0 +1,4 @@ +flake8==3.8.3 +mccabe==0.6.1 +pycodestyle==2.6.0 +pyflakes==2.2.0 diff --git a/requirement_files/funcsigs.txt b/requirement_files/funcsigs.txt new file mode 100644 index 0000000..0a9a367 --- /dev/null +++ b/requirement_files/funcsigs.txt @@ -0,0 +1 @@ +funcsigs==1.0.2 diff --git a/requirement_files/importlib-metadata.txt b/requirement_files/importlib-metadata.txt new file mode 100644 index 0000000..09c5889 --- /dev/null +++ b/requirement_files/importlib-metadata.txt @@ -0,0 +1,2 @@ +importlib-metadata==1.6.1 +zipp==3.1.0 diff --git a/requirement_files/isort.txt b/requirement_files/isort.txt new file mode 100644 index 0000000..d34d962 --- /dev/null +++ b/requirement_files/isort.txt @@ -0,0 +1 @@ +isort==4.3.21 diff --git a/requirement_files/packaging.txt b/requirement_files/packaging.txt new file mode 100644 index 0000000..747dbee --- /dev/null +++ b/requirement_files/packaging.txt @@ -0,0 +1,3 @@ +packaging==20.4 +pyparsing==2.4.7 +six==1.15.0 diff --git a/requirement_files/pre-commit.txt b/requirement_files/pre-commit.txt new file mode 100644 index 0000000..c9e981c --- /dev/null +++ b/requirement_files/pre-commit.txt @@ -0,0 +1,11 @@ +appdirs==1.4.4 +cfgv==3.1.0 +distlib==0.3.0 +filelock==3.0.12 +identify==1.4.19 +nodeenv==1.4.0 +pre-commit==2.5.1 +PyYAML==5.3.1 +six==1.15.0 +toml==0.10.1 +virtualenv==20.0.23 diff --git a/requirement_files/pyobjc.txt b/requirement_files/pyobjc.txt new file mode 100644 index 0000000..e7703f7 --- /dev/null +++ b/requirement_files/pyobjc.txt @@ -0,0 +1,114 @@ +pyobjc==6.2.1 +pyobjc-core==6.2.1 +pyobjc-framework-Accounts==6.2.1 +pyobjc-framework-AddressBook==6.2.1 +pyobjc-framework-AdSupport==6.2.1 +pyobjc-framework-AppleScriptKit==6.2.1 +pyobjc-framework-AppleScriptObjC==6.2.1 +pyobjc-framework-ApplicationServices==6.2.1 +pyobjc-framework-AuthenticationServices==6.2.1 +pyobjc-framework-AutomaticAssessmentConfiguration==6.2.1 +pyobjc-framework-Automator==6.2.1 +pyobjc-framework-AVFoundation==6.2.1 +pyobjc-framework-AVKit==6.2.1 +pyobjc-framework-BusinessChat==6.2.1 +pyobjc-framework-CalendarStore==6.2.1 +pyobjc-framework-CFNetwork==6.2.1 +pyobjc-framework-CloudKit==6.2.1 +pyobjc-framework-Cocoa==6.2.1 +pyobjc-framework-Collaboration==6.2.1 +pyobjc-framework-ColorSync==6.2.1 +pyobjc-framework-Contacts==6.2.1 +pyobjc-framework-ContactsUI==6.2.1 +pyobjc-framework-CoreAudio==6.2.1 +pyobjc-framework-CoreAudioKit==6.2.1 +pyobjc-framework-CoreBluetooth==6.2.1 +pyobjc-framework-CoreData==6.2.1 +pyobjc-framework-CoreHaptics==6.2.1 +pyobjc-framework-CoreLocation==6.2.1 +pyobjc-framework-CoreMedia==6.2.1 +pyobjc-framework-CoreMediaIO==6.2.1 +pyobjc-framework-CoreML==6.2.1 +pyobjc-framework-CoreMotion==6.2.1 +pyobjc-framework-CoreServices==6.2.1 +pyobjc-framework-CoreSpotlight==6.2.1 +pyobjc-framework-CoreText==6.2.1 +pyobjc-framework-CoreWLAN==6.2.1 +pyobjc-framework-CryptoTokenKit==6.2.1 +pyobjc-framework-DeviceCheck==6.2.1 +pyobjc-framework-DictionaryServices==6.2.1 +pyobjc-framework-DiscRecording==6.2.1 +pyobjc-framework-DiscRecordingUI==6.2.1 +pyobjc-framework-DiskArbitration==6.2.1 +pyobjc-framework-DVDPlayback==6.2.1 +pyobjc-framework-EventKit==6.2.1 +pyobjc-framework-ExceptionHandling==6.2.1 +pyobjc-framework-ExecutionPolicy==6.2.1 +pyobjc-framework-ExternalAccessory==6.2.1 +pyobjc-framework-FileProvider==6.2.1 +pyobjc-framework-FileProviderUI==6.2.1 +pyobjc-framework-FinderSync==6.2.1 +pyobjc-framework-FSEvents==6.2.1 +pyobjc-framework-GameCenter==6.2.1 +pyobjc-framework-GameController==6.2.1 +pyobjc-framework-GameKit==6.2.1 +pyobjc-framework-GameplayKit==6.2.1 +pyobjc-framework-ImageCaptureCore==6.2.1 +pyobjc-framework-IMServicePlugIn==6.2.1 +pyobjc-framework-InputMethodKit==6.2.1 +pyobjc-framework-InstallerPlugins==6.2.1 +pyobjc-framework-InstantMessage==6.2.1 +pyobjc-framework-Intents==6.2.1 +pyobjc-framework-IOSurface==6.2.1 +pyobjc-framework-iTunesLibrary==6.2.1 +pyobjc-framework-LatentSemanticMapping==6.2.1 +pyobjc-framework-LaunchServices==6.2.1 +pyobjc-framework-libdispatch==6.2.1 +pyobjc-framework-LinkPresentation==6.2.1 +pyobjc-framework-LocalAuthentication==6.2.1 +pyobjc-framework-MapKit==6.2.1 +pyobjc-framework-MediaAccessibility==6.2.1 +pyobjc-framework-MediaLibrary==6.2.1 +pyobjc-framework-MediaPlayer==6.2.1 +pyobjc-framework-MediaToolbox==6.2.1 +pyobjc-framework-Metal==6.2.1 +pyobjc-framework-MetalKit==6.2.1 +pyobjc-framework-ModelIO==6.2.1 +pyobjc-framework-MultipeerConnectivity==6.2.1 +pyobjc-framework-NaturalLanguage==6.2.1 +pyobjc-framework-NetFS==6.2.1 +pyobjc-framework-Network==6.2.1 +pyobjc-framework-NetworkExtension==6.2.1 +pyobjc-framework-NotificationCenter==6.2.1 +pyobjc-framework-OpenDirectory==6.2.1 +pyobjc-framework-OSAKit==6.2.1 +pyobjc-framework-OSLog==6.2.1 +pyobjc-framework-PencilKit==6.2.1 +pyobjc-framework-Photos==6.2.1 +pyobjc-framework-PhotosUI==6.2.1 +pyobjc-framework-PreferencePanes==6.2.1 +pyobjc-framework-PushKit==6.2.1 +pyobjc-framework-Quartz==6.2.1 +pyobjc-framework-QuickLookThumbnailing==6.2.1 +pyobjc-framework-SafariServices==6.2.1 +pyobjc-framework-SceneKit==6.2.1 +pyobjc-framework-ScreenSaver==6.2.1 +pyobjc-framework-ScriptingBridge==6.2.1 +pyobjc-framework-SearchKit==6.2.1 +pyobjc-framework-Security==6.2.1 +pyobjc-framework-SecurityFoundation==6.2.1 +pyobjc-framework-SecurityInterface==6.2.1 +pyobjc-framework-ServiceManagement==6.2.1 +pyobjc-framework-Social==6.2.1 +pyobjc-framework-SoundAnalysis==6.2.1 +pyobjc-framework-Speech==6.2.1 +pyobjc-framework-SpriteKit==6.2.1 +pyobjc-framework-StoreKit==6.2.1 +pyobjc-framework-SyncServices==6.2.1 +pyobjc-framework-SystemConfiguration==6.2.1 +pyobjc-framework-SystemExtensions==6.2.1 +pyobjc-framework-UserNotifications==6.2.1 +pyobjc-framework-VideoSubscriberAccount==6.2.1 +pyobjc-framework-VideoToolbox==6.2.1 +pyobjc-framework-Vision==6.2.1 +pyobjc-framework-WebKit==6.2.1 diff --git a/requirement_files/pytest-docker.txt b/requirement_files/pytest-docker.txt new file mode 100644 index 0000000..67b68ee --- /dev/null +++ b/requirement_files/pytest-docker.txt @@ -0,0 +1,2 @@ +attrs==19.3.0 +pytest-docker==0.7.2 diff --git a/requirement_files/pytest.txt b/requirement_files/pytest.txt new file mode 100644 index 0000000..0d6860a --- /dev/null +++ b/requirement_files/pytest.txt @@ -0,0 +1,9 @@ +attrs==19.3.0 +more-itertools==8.4.0 +packaging==20.4 +pluggy==0.13.1 +py==1.8.1 +pyparsing==2.4.7 +pytest==5.4.3 +six==1.15.0 +wcwidth==0.2.4 diff --git a/requirement_files/python-dotenv.txt b/requirement_files/python-dotenv.txt new file mode 100644 index 0000000..f251710 --- /dev/null +++ b/requirement_files/python-dotenv.txt @@ -0,0 +1 @@ +python-dotenv==0.13.0 diff --git a/requirement_files/requests.txt b/requirement_files/requests.txt new file mode 100644 index 0000000..85dec94 --- /dev/null +++ b/requirement_files/requests.txt @@ -0,0 +1,5 @@ +certifi==2020.4.5.2 +chardet==3.0.4 +idna==2.9 +requests==2.23.0 +urllib3==1.25.9 diff --git a/requirement_files/requirements_minimal.txt b/requirement_files/requirements_minimal.txt new file mode 100644 index 0000000..22907fe --- /dev/null +++ b/requirement_files/requirements_minimal.txt @@ -0,0 +1,2 @@ +-r pyobjc.txt +-r xattr.txt diff --git a/requirement_files/requirements_opinionated.txt b/requirement_files/requirements_opinionated.txt new file mode 100755 index 0000000..25527bd --- /dev/null +++ b/requirement_files/requirements_opinionated.txt @@ -0,0 +1,24 @@ +-r arrow.txt +-r aspy.yaml.txt +-r atomicwrites.txt +-r black.txt +-r boto.txt +-r entrypoints.txt +-r flake8.txt +-r flake8-bugbear.txt +-r funcsigs.txt +-r importlib-metadata.txt +-r isort.txt +-r packaging.txt +-r pre-commit.txt +-r pyobjc.txt +-r pytest.txt +-r pytest-docker.txt +-r python-dotenv.txt +-r requests.txt +-r rsa.txt +-r slacker.txt +-r Sphinx.txt +-r tokenize-rt.txt +-r virtualenv.txt +-r xattr.txt diff --git a/requirement_files/requirements_recommended.txt b/requirement_files/requirements_recommended.txt new file mode 100644 index 0000000..a7a13ea --- /dev/null +++ b/requirement_files/requirements_recommended.txt @@ -0,0 +1,14 @@ +-r aspy.yaml.txt +-r black.txt +-r entrypoints.txt +-r flake8.txt +-r flake8-bugbear.txt +-r importlib-metadata.txt +-r isort.txt +-r packaging.txt +-r pre-commit.txt +-r pyobjc.txt +-r requests.txt +-r tokenize-rt.txt +-r virtualenv.txt +-r xattr.txt diff --git a/requirement_files/rsa.txt b/requirement_files/rsa.txt new file mode 100644 index 0000000..76f26c5 --- /dev/null +++ b/requirement_files/rsa.txt @@ -0,0 +1,2 @@ +pyasn1==0.4.8 +rsa==4.6 diff --git a/requirement_files/slacker.txt b/requirement_files/slacker.txt new file mode 100644 index 0000000..6343327 --- /dev/null +++ b/requirement_files/slacker.txt @@ -0,0 +1,6 @@ +certifi==2020.4.5.2 +chardet==3.0.4 +idna==2.9 +requests==2.23.0 +slacker==0.14.0 +urllib3==1.25.9 diff --git a/requirement_files/tokenize-rt.txt b/requirement_files/tokenize-rt.txt new file mode 100644 index 0000000..f433c4a --- /dev/null +++ b/requirement_files/tokenize-rt.txt @@ -0,0 +1 @@ +tokenize-rt==4.0.0 diff --git a/requirement_files/virtualenv.txt b/requirement_files/virtualenv.txt new file mode 100644 index 0000000..2fe13be --- /dev/null +++ b/requirement_files/virtualenv.txt @@ -0,0 +1,5 @@ +appdirs==1.4.4 +distlib==0.3.0 +filelock==3.0.12 +six==1.15.0 +virtualenv==20.0.23 diff --git a/requirement_files/xattr.txt b/requirement_files/xattr.txt new file mode 100644 index 0000000..3ddf18c --- /dev/null +++ b/requirement_files/xattr.txt @@ -0,0 +1,3 @@ +cffi==1.14.0 +pycparser==2.20 +xattr==0.9.7 diff --git a/requirements_minimal.txt b/requirements_minimal.txt new file mode 100644 index 0000000..54ad376 --- /dev/null +++ b/requirements_minimal.txt @@ -0,0 +1,115 @@ +pyobjc==6.2.1 +pyobjc-core==6.2.1 +pyobjc-framework-Accounts==6.2.1 +pyobjc-framework-AddressBook==6.2.1 +pyobjc-framework-AdSupport==6.2.1 +pyobjc-framework-AppleScriptKit==6.2.1 +pyobjc-framework-AppleScriptObjC==6.2.1 +pyobjc-framework-ApplicationServices==6.2.1 +pyobjc-framework-AuthenticationServices==6.2.1 +pyobjc-framework-AutomaticAssessmentConfiguration==6.2.1 +pyobjc-framework-Automator==6.2.1 +pyobjc-framework-AVFoundation==6.2.1 +pyobjc-framework-AVKit==6.2.1 +pyobjc-framework-BusinessChat==6.2.1 +pyobjc-framework-CalendarStore==6.2.1 +pyobjc-framework-CFNetwork==6.2.1 +pyobjc-framework-CloudKit==6.2.1 +pyobjc-framework-Cocoa==6.2.1 +pyobjc-framework-Collaboration==6.2.1 +pyobjc-framework-ColorSync==6.2.1 +pyobjc-framework-Contacts==6.2.1 +pyobjc-framework-ContactsUI==6.2.1 +pyobjc-framework-CoreAudio==6.2.1 +pyobjc-framework-CoreAudioKit==6.2.1 +pyobjc-framework-CoreBluetooth==6.2.1 +pyobjc-framework-CoreData==6.2.1 +pyobjc-framework-CoreHaptics==6.2.1 +pyobjc-framework-CoreLocation==6.2.1 +pyobjc-framework-CoreMedia==6.2.1 +pyobjc-framework-CoreMediaIO==6.2.1 +pyobjc-framework-CoreML==6.2.1 +pyobjc-framework-CoreMotion==6.2.1 +pyobjc-framework-CoreServices==6.2.1 +pyobjc-framework-CoreSpotlight==6.2.1 +pyobjc-framework-CoreText==6.2.1 +pyobjc-framework-CoreWLAN==6.2.1 +pyobjc-framework-CryptoTokenKit==6.2.1 +pyobjc-framework-DeviceCheck==6.2.1 +pyobjc-framework-DictionaryServices==6.2.1 +pyobjc-framework-DiscRecording==6.2.1 +pyobjc-framework-DiscRecordingUI==6.2.1 +pyobjc-framework-DiskArbitration==6.2.1 +pyobjc-framework-DVDPlayback==6.2.1 +pyobjc-framework-EventKit==6.2.1 +pyobjc-framework-ExceptionHandling==6.2.1 +pyobjc-framework-ExecutionPolicy==6.2.1 +pyobjc-framework-ExternalAccessory==6.2.1 +pyobjc-framework-FileProvider==6.2.1 +pyobjc-framework-FileProviderUI==6.2.1 +pyobjc-framework-FinderSync==6.2.1 +pyobjc-framework-FSEvents==6.2.1 +pyobjc-framework-GameCenter==6.2.1 +pyobjc-framework-GameController==6.2.1 +pyobjc-framework-GameKit==6.2.1 +pyobjc-framework-GameplayKit==6.2.1 +pyobjc-framework-ImageCaptureCore==6.2.1 +pyobjc-framework-IMServicePlugIn==6.2.1 +pyobjc-framework-InputMethodKit==6.2.1 +pyobjc-framework-InstallerPlugins==6.2.1 +pyobjc-framework-InstantMessage==6.2.1 +pyobjc-framework-Intents==6.2.1 +pyobjc-framework-IOSurface==6.2.1 +pyobjc-framework-iTunesLibrary==6.2.1 +pyobjc-framework-LatentSemanticMapping==6.2.1 +pyobjc-framework-LaunchServices==6.2.1 +pyobjc-framework-libdispatch==6.2.1 +pyobjc-framework-LinkPresentation==6.2.1 +pyobjc-framework-LocalAuthentication==6.2.1 +pyobjc-framework-MapKit==6.2.1 +pyobjc-framework-MediaAccessibility==6.2.1 +pyobjc-framework-MediaLibrary==6.2.1 +pyobjc-framework-MediaPlayer==6.2.1 +pyobjc-framework-MediaToolbox==6.2.1 +pyobjc-framework-Metal==6.2.1 +pyobjc-framework-MetalKit==6.2.1 +pyobjc-framework-ModelIO==6.2.1 +pyobjc-framework-MultipeerConnectivity==6.2.1 +pyobjc-framework-NaturalLanguage==6.2.1 +pyobjc-framework-NetFS==6.2.1 +pyobjc-framework-Network==6.2.1 +pyobjc-framework-NetworkExtension==6.2.1 +pyobjc-framework-NotificationCenter==6.2.1 +pyobjc-framework-OpenDirectory==6.2.1 +pyobjc-framework-OSAKit==6.2.1 +pyobjc-framework-OSLog==6.2.1 +pyobjc-framework-PencilKit==6.2.1 +pyobjc-framework-Photos==6.2.1 +pyobjc-framework-PhotosUI==6.2.1 +pyobjc-framework-PreferencePanes==6.2.1 +pyobjc-framework-PushKit==6.2.1 +pyobjc-framework-Quartz==6.2.1 +pyobjc-framework-QuickLookThumbnailing==6.2.1 +pyobjc-framework-SafariServices==6.2.1 +pyobjc-framework-SceneKit==6.2.1 +pyobjc-framework-ScreenSaver==6.2.1 +pyobjc-framework-ScriptingBridge==6.2.1 +pyobjc-framework-SearchKit==6.2.1 +pyobjc-framework-Security==6.2.1 +pyobjc-framework-SecurityFoundation==6.2.1 +pyobjc-framework-SecurityInterface==6.2.1 +pyobjc-framework-ServiceManagement==6.2.1 +pyobjc-framework-Social==6.2.1 +pyobjc-framework-SoundAnalysis==6.2.1 +pyobjc-framework-Speech==6.2.1 +pyobjc-framework-SpriteKit==6.2.1 +pyobjc-framework-StoreKit==6.2.1 +pyobjc-framework-SyncServices==6.2.1 +pyobjc-framework-SystemConfiguration==6.2.1 +pyobjc-framework-SystemExtensions==6.2.1 +pyobjc-framework-UserNotifications==6.2.1 +pyobjc-framework-VideoSubscriberAccount==6.2.1 +pyobjc-framework-VideoToolbox==6.2.1 +pyobjc-framework-Vision==6.2.1 +pyobjc-framework-WebKit==6.2.1 +xattr==0.9.7 diff --git a/requirements_no_customization.txt b/requirements_no_customization.txt new file mode 100644 index 0000000..e69de29 diff --git a/requirements_opionated.txt b/requirements_opionated.txt new file mode 100644 index 0000000..cb3de5a --- /dev/null +++ b/requirements_opionated.txt @@ -0,0 +1,183 @@ +alabaster==0.7.12 +appdirs==1.4.4 +arrow==0.15.6 +aspy.yaml==1.3.0 +atomicwrites==1.4.0 +attrs==19.3.0 +Babel==2.8.0 +black==19.10b0 +boto==2.49.0 +certifi==2020.4.5.2 +cffi==1.14.0 +cfgv==3.1.0 +chardet==3.0.4 +click==7.1.2 +distlib==0.3.0 +docutils==0.16 +entrypoints==0.3 +filelock==3.0.12 +flake8==3.8.3 +flake8-bugbear==20.1.4 +funcsigs==1.0.2 +identify==1.4.19 +idna==2.9 +imagesize==1.2.0 +importlib-metadata==1.6.1 +isort==4.3.21 +Jinja2==2.11.2 +MarkupSafe==1.1.1 +mccabe==0.6.1 +more-itertools==8.4.0 +nodeenv==1.4.0 +packaging==20.4 +pathspec==0.8.0 +pluggy==0.13.1 +pre-commit==2.5.1 +py==1.8.1 +pyasn1==0.4.8 +pycodestyle==2.6.0 +pycparser==2.20 +pyflakes==2.2.0 +Pygments==2.6.1 +pyobjc==6.2.1 +pyobjc-core==6.2.1 +pyobjc-framework-Accounts==6.2.1 +pyobjc-framework-AddressBook==6.2.1 +pyobjc-framework-AdSupport==6.2.1 +pyobjc-framework-AppleScriptKit==6.2.1 +pyobjc-framework-AppleScriptObjC==6.2.1 +pyobjc-framework-ApplicationServices==6.2.1 +pyobjc-framework-AuthenticationServices==6.2.1 +pyobjc-framework-AutomaticAssessmentConfiguration==6.2.1 +pyobjc-framework-Automator==6.2.1 +pyobjc-framework-AVFoundation==6.2.1 +pyobjc-framework-AVKit==6.2.1 +pyobjc-framework-BusinessChat==6.2.1 +pyobjc-framework-CalendarStore==6.2.1 +pyobjc-framework-CFNetwork==6.2.1 +pyobjc-framework-CloudKit==6.2.1 +pyobjc-framework-Cocoa==6.2.1 +pyobjc-framework-Collaboration==6.2.1 +pyobjc-framework-ColorSync==6.2.1 +pyobjc-framework-Contacts==6.2.1 +pyobjc-framework-ContactsUI==6.2.1 +pyobjc-framework-CoreAudio==6.2.1 +pyobjc-framework-CoreAudioKit==6.2.1 +pyobjc-framework-CoreBluetooth==6.2.1 +pyobjc-framework-CoreData==6.2.1 +pyobjc-framework-CoreHaptics==6.2.1 +pyobjc-framework-CoreLocation==6.2.1 +pyobjc-framework-CoreMedia==6.2.1 +pyobjc-framework-CoreMediaIO==6.2.1 +pyobjc-framework-CoreML==6.2.1 +pyobjc-framework-CoreMotion==6.2.1 +pyobjc-framework-CoreServices==6.2.1 +pyobjc-framework-CoreSpotlight==6.2.1 +pyobjc-framework-CoreText==6.2.1 +pyobjc-framework-CoreWLAN==6.2.1 +pyobjc-framework-CryptoTokenKit==6.2.1 +pyobjc-framework-DeviceCheck==6.2.1 +pyobjc-framework-DictionaryServices==6.2.1 +pyobjc-framework-DiscRecording==6.2.1 +pyobjc-framework-DiscRecordingUI==6.2.1 +pyobjc-framework-DiskArbitration==6.2.1 +pyobjc-framework-DVDPlayback==6.2.1 +pyobjc-framework-EventKit==6.2.1 +pyobjc-framework-ExceptionHandling==6.2.1 +pyobjc-framework-ExecutionPolicy==6.2.1 +pyobjc-framework-ExternalAccessory==6.2.1 +pyobjc-framework-FileProvider==6.2.1 +pyobjc-framework-FileProviderUI==6.2.1 +pyobjc-framework-FinderSync==6.2.1 +pyobjc-framework-FSEvents==6.2.1 +pyobjc-framework-GameCenter==6.2.1 +pyobjc-framework-GameController==6.2.1 +pyobjc-framework-GameKit==6.2.1 +pyobjc-framework-GameplayKit==6.2.1 +pyobjc-framework-ImageCaptureCore==6.2.1 +pyobjc-framework-IMServicePlugIn==6.2.1 +pyobjc-framework-InputMethodKit==6.2.1 +pyobjc-framework-InstallerPlugins==6.2.1 +pyobjc-framework-InstantMessage==6.2.1 +pyobjc-framework-Intents==6.2.1 +pyobjc-framework-IOSurface==6.2.1 +pyobjc-framework-iTunesLibrary==6.2.1 +pyobjc-framework-LatentSemanticMapping==6.2.1 +pyobjc-framework-LaunchServices==6.2.1 +pyobjc-framework-libdispatch==6.2.1 +pyobjc-framework-LinkPresentation==6.2.1 +pyobjc-framework-LocalAuthentication==6.2.1 +pyobjc-framework-MapKit==6.2.1 +pyobjc-framework-MediaAccessibility==6.2.1 +pyobjc-framework-MediaLibrary==6.2.1 +pyobjc-framework-MediaPlayer==6.2.1 +pyobjc-framework-MediaToolbox==6.2.1 +pyobjc-framework-Metal==6.2.1 +pyobjc-framework-MetalKit==6.2.1 +pyobjc-framework-ModelIO==6.2.1 +pyobjc-framework-MultipeerConnectivity==6.2.1 +pyobjc-framework-NaturalLanguage==6.2.1 +pyobjc-framework-NetFS==6.2.1 +pyobjc-framework-Network==6.2.1 +pyobjc-framework-NetworkExtension==6.2.1 +pyobjc-framework-NotificationCenter==6.2.1 +pyobjc-framework-OpenDirectory==6.2.1 +pyobjc-framework-OSAKit==6.2.1 +pyobjc-framework-OSLog==6.2.1 +pyobjc-framework-PencilKit==6.2.1 +pyobjc-framework-Photos==6.2.1 +pyobjc-framework-PhotosUI==6.2.1 +pyobjc-framework-PreferencePanes==6.2.1 +pyobjc-framework-PushKit==6.2.1 +pyobjc-framework-Quartz==6.2.1 +pyobjc-framework-QuickLookThumbnailing==6.2.1 +pyobjc-framework-SafariServices==6.2.1 +pyobjc-framework-SceneKit==6.2.1 +pyobjc-framework-ScreenSaver==6.2.1 +pyobjc-framework-ScriptingBridge==6.2.1 +pyobjc-framework-SearchKit==6.2.1 +pyobjc-framework-Security==6.2.1 +pyobjc-framework-SecurityFoundation==6.2.1 +pyobjc-framework-SecurityInterface==6.2.1 +pyobjc-framework-ServiceManagement==6.2.1 +pyobjc-framework-Social==6.2.1 +pyobjc-framework-SoundAnalysis==6.2.1 +pyobjc-framework-Speech==6.2.1 +pyobjc-framework-SpriteKit==6.2.1 +pyobjc-framework-StoreKit==6.2.1 +pyobjc-framework-SyncServices==6.2.1 +pyobjc-framework-SystemConfiguration==6.2.1 +pyobjc-framework-SystemExtensions==6.2.1 +pyobjc-framework-UserNotifications==6.2.1 +pyobjc-framework-VideoSubscriberAccount==6.2.1 +pyobjc-framework-VideoToolbox==6.2.1 +pyobjc-framework-Vision==6.2.1 +pyobjc-framework-WebKit==6.2.1 +pyparsing==2.4.7 +pytest==5.4.3 +pytest-docker==0.7.2 +python-dateutil==2.8.1 +python-dotenv==0.13.0 +pytz==2020.1 +PyYAML==5.3.1 +regex==2020.6.8 +requests==2.23.0 +rsa==4.6 +six==1.15.0 +slacker==0.14.0 +snowballstemmer==2.0.0 +Sphinx==3.1.1 +sphinxcontrib-applehelp==1.0.2 +sphinxcontrib-devhelp==1.0.2 +sphinxcontrib-htmlhelp==1.0.3 +sphinxcontrib-jsmath==1.0.1 +sphinxcontrib-qthelp==1.0.3 +sphinxcontrib-serializinghtml==1.1.4 +tokenize-rt==4.0.0 +toml==0.10.1 +typed-ast==1.4.1 +urllib3==1.25.9 +virtualenv==20.0.23 +wcwidth==0.2.4 +xattr==0.9.7 +zipp==3.1.0 diff --git a/requirements_recommended.txt b/requirements_recommended.txt new file mode 100644 index 0000000..92fbb71 --- /dev/null +++ b/requirements_recommended.txt @@ -0,0 +1,152 @@ +appdirs==1.4.4 +aspy.yaml==1.3.0 +attrs==19.3.0 +black==19.10b0 +certifi==2020.4.5.2 +cffi==1.14.0 +cfgv==3.1.0 +chardet==3.0.4 +click==7.1.2 +distlib==0.3.0 +entrypoints==0.3 +filelock==3.0.12 +flake8==3.8.3 +flake8-bugbear==20.1.4 +identify==1.4.19 +idna==2.9 +importlib-metadata==1.6.1 +isort==4.3.21 +mccabe==0.6.1 +nodeenv==1.4.0 +packaging==20.4 +pathspec==0.8.0 +pre-commit==2.5.1 +pycodestyle==2.6.0 +pycparser==2.20 +pyflakes==2.2.0 +pyobjc==6.2.1 +pyobjc-core==6.2.1 +pyobjc-framework-Accounts==6.2.1 +pyobjc-framework-AddressBook==6.2.1 +pyobjc-framework-AdSupport==6.2.1 +pyobjc-framework-AppleScriptKit==6.2.1 +pyobjc-framework-AppleScriptObjC==6.2.1 +pyobjc-framework-ApplicationServices==6.2.1 +pyobjc-framework-AuthenticationServices==6.2.1 +pyobjc-framework-AutomaticAssessmentConfiguration==6.2.1 +pyobjc-framework-Automator==6.2.1 +pyobjc-framework-AVFoundation==6.2.1 +pyobjc-framework-AVKit==6.2.1 +pyobjc-framework-BusinessChat==6.2.1 +pyobjc-framework-CalendarStore==6.2.1 +pyobjc-framework-CFNetwork==6.2.1 +pyobjc-framework-CloudKit==6.2.1 +pyobjc-framework-Cocoa==6.2.1 +pyobjc-framework-Collaboration==6.2.1 +pyobjc-framework-ColorSync==6.2.1 +pyobjc-framework-Contacts==6.2.1 +pyobjc-framework-ContactsUI==6.2.1 +pyobjc-framework-CoreAudio==6.2.1 +pyobjc-framework-CoreAudioKit==6.2.1 +pyobjc-framework-CoreBluetooth==6.2.1 +pyobjc-framework-CoreData==6.2.1 +pyobjc-framework-CoreHaptics==6.2.1 +pyobjc-framework-CoreLocation==6.2.1 +pyobjc-framework-CoreMedia==6.2.1 +pyobjc-framework-CoreMediaIO==6.2.1 +pyobjc-framework-CoreML==6.2.1 +pyobjc-framework-CoreMotion==6.2.1 +pyobjc-framework-CoreServices==6.2.1 +pyobjc-framework-CoreSpotlight==6.2.1 +pyobjc-framework-CoreText==6.2.1 +pyobjc-framework-CoreWLAN==6.2.1 +pyobjc-framework-CryptoTokenKit==6.2.1 +pyobjc-framework-DeviceCheck==6.2.1 +pyobjc-framework-DictionaryServices==6.2.1 +pyobjc-framework-DiscRecording==6.2.1 +pyobjc-framework-DiscRecordingUI==6.2.1 +pyobjc-framework-DiskArbitration==6.2.1 +pyobjc-framework-DVDPlayback==6.2.1 +pyobjc-framework-EventKit==6.2.1 +pyobjc-framework-ExceptionHandling==6.2.1 +pyobjc-framework-ExecutionPolicy==6.2.1 +pyobjc-framework-ExternalAccessory==6.2.1 +pyobjc-framework-FileProvider==6.2.1 +pyobjc-framework-FileProviderUI==6.2.1 +pyobjc-framework-FinderSync==6.2.1 +pyobjc-framework-FSEvents==6.2.1 +pyobjc-framework-GameCenter==6.2.1 +pyobjc-framework-GameController==6.2.1 +pyobjc-framework-GameKit==6.2.1 +pyobjc-framework-GameplayKit==6.2.1 +pyobjc-framework-ImageCaptureCore==6.2.1 +pyobjc-framework-IMServicePlugIn==6.2.1 +pyobjc-framework-InputMethodKit==6.2.1 +pyobjc-framework-InstallerPlugins==6.2.1 +pyobjc-framework-InstantMessage==6.2.1 +pyobjc-framework-Intents==6.2.1 +pyobjc-framework-IOSurface==6.2.1 +pyobjc-framework-iTunesLibrary==6.2.1 +pyobjc-framework-LatentSemanticMapping==6.2.1 +pyobjc-framework-LaunchServices==6.2.1 +pyobjc-framework-libdispatch==6.2.1 +pyobjc-framework-LinkPresentation==6.2.1 +pyobjc-framework-LocalAuthentication==6.2.1 +pyobjc-framework-MapKit==6.2.1 +pyobjc-framework-MediaAccessibility==6.2.1 +pyobjc-framework-MediaLibrary==6.2.1 +pyobjc-framework-MediaPlayer==6.2.1 +pyobjc-framework-MediaToolbox==6.2.1 +pyobjc-framework-Metal==6.2.1 +pyobjc-framework-MetalKit==6.2.1 +pyobjc-framework-ModelIO==6.2.1 +pyobjc-framework-MultipeerConnectivity==6.2.1 +pyobjc-framework-NaturalLanguage==6.2.1 +pyobjc-framework-NetFS==6.2.1 +pyobjc-framework-Network==6.2.1 +pyobjc-framework-NetworkExtension==6.2.1 +pyobjc-framework-NotificationCenter==6.2.1 +pyobjc-framework-OpenDirectory==6.2.1 +pyobjc-framework-OSAKit==6.2.1 +pyobjc-framework-OSLog==6.2.1 +pyobjc-framework-PencilKit==6.2.1 +pyobjc-framework-Photos==6.2.1 +pyobjc-framework-PhotosUI==6.2.1 +pyobjc-framework-PreferencePanes==6.2.1 +pyobjc-framework-PushKit==6.2.1 +pyobjc-framework-Quartz==6.2.1 +pyobjc-framework-QuickLookThumbnailing==6.2.1 +pyobjc-framework-SafariServices==6.2.1 +pyobjc-framework-SceneKit==6.2.1 +pyobjc-framework-ScreenSaver==6.2.1 +pyobjc-framework-ScriptingBridge==6.2.1 +pyobjc-framework-SearchKit==6.2.1 +pyobjc-framework-Security==6.2.1 +pyobjc-framework-SecurityFoundation==6.2.1 +pyobjc-framework-SecurityInterface==6.2.1 +pyobjc-framework-ServiceManagement==6.2.1 +pyobjc-framework-Social==6.2.1 +pyobjc-framework-SoundAnalysis==6.2.1 +pyobjc-framework-Speech==6.2.1 +pyobjc-framework-SpriteKit==6.2.1 +pyobjc-framework-StoreKit==6.2.1 +pyobjc-framework-SyncServices==6.2.1 +pyobjc-framework-SystemConfiguration==6.2.1 +pyobjc-framework-SystemExtensions==6.2.1 +pyobjc-framework-UserNotifications==6.2.1 +pyobjc-framework-VideoSubscriberAccount==6.2.1 +pyobjc-framework-VideoToolbox==6.2.1 +pyobjc-framework-Vision==6.2.1 +pyobjc-framework-WebKit==6.2.1 +pyparsing==2.4.7 +PyYAML==5.3.1 +regex==2020.6.8 +requests==2.23.0 +six==1.15.0 +tokenize-rt==4.0.0 +toml==0.10.1 +typed-ast==1.4.1 +urllib3==1.25.9 +virtualenv==20.0.23 +xattr==0.9.7 +zipp==3.1.0