diff --git a/.travis.yml b/.travis.yml
index 5a2c975eb..1ffe7754b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,7 +5,6 @@ python:
- 3.8
- 3.7
- 3.6
- - 3.5
env:
matrix:
diff --git a/CHANGELOG.md b/CHANGELOG.md
index b62b291fc..e9d0fb961 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -10,7 +10,7 @@ This document follows the conventions laid out in [Keep a CHANGELOG][].
### Added
### Changed
-- Drop support for Python 2
+- Drop support for Python 2, 3.4, and 3.5
- `clr.AddReference` may now throw errors besides `FileNotFoundException`, that provide more
details about the cause of the failure
- `clr.AddReference` no longer adds ".dll" implicitly
diff --git a/appveyor.yml b/appveyor.yml
index 142ee433c..f64fbf0f6 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -21,12 +21,9 @@ environment:
BUILD_OPTS: --xplat
- PYTHON_VERSION: 3.6
BUILD_OPTS: --xplat
- - PYTHON_VERSION: 3.5
- BUILD_OPTS: --xplat
- PYTHON_VERSION: 3.8
- PYTHON_VERSION: 3.7
- PYTHON_VERSION: 3.6
- - PYTHON_VERSION: 3.5
init:
# Update Environment Variables based on matrix/platform
diff --git a/setup.py b/setup.py
index ca4f49a63..9b7219008 100644
--- a/setup.py
+++ b/setup.py
@@ -637,7 +637,6 @@ def run(self):
"License :: OSI Approved :: MIT License",
"Programming Language :: C#",
"Programming Language :: Python :: 3",
- "Programming Language :: Python :: 3.5",
"Programming Language :: Python :: 3.6",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8",
diff --git a/src/runtime/Python.Runtime.csproj b/src/runtime/Python.Runtime.csproj
index 87e5ac54c..8afa60f4f 100644
--- a/src/runtime/Python.Runtime.csproj
+++ b/src/runtime/Python.Runtime.csproj
@@ -161,8 +161,6 @@
-
-
diff --git a/src/runtime/interop34.cs b/src/runtime/interop34.cs
deleted file mode 100644
index 6857ff2d0..000000000
--- a/src/runtime/interop34.cs
+++ /dev/null
@@ -1,144 +0,0 @@
-// Auto-generated by geninterop.py.
-// DO NOT MODIFIY BY HAND.
-
-
-#if PYTHON34
-using System;
-using System.Collections;
-using System.Collections.Specialized;
-using System.Runtime.InteropServices;
-using System.Reflection;
-using System.Text;
-
-namespace Python.Runtime
-{
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
- internal class TypeOffset
- {
- static TypeOffset()
- {
- Type type = typeof(TypeOffset);
- FieldInfo[] fi = type.GetFields();
- int size = IntPtr.Size;
- for (int i = 0; i < fi.Length; i++)
- {
- fi[i].SetValue(null, i * size);
- }
- }
-
- public static int magic()
- {
- return ob_size;
- }
-
- // Auto-generated from PyHeapTypeObject in Python.h
- public static int ob_refcnt = 0;
- public static int ob_type = 0;
- public static int ob_size = 0;
- public static int tp_name = 0;
- public static int tp_basicsize = 0;
- public static int tp_itemsize = 0;
- public static int tp_dealloc = 0;
- public static int tp_print = 0;
- public static int tp_getattr = 0;
- public static int tp_setattr = 0;
- public static int tp_reserved = 0;
- public static int tp_repr = 0;
- public static int tp_as_number = 0;
- public static int tp_as_sequence = 0;
- public static int tp_as_mapping = 0;
- public static int tp_hash = 0;
- public static int tp_call = 0;
- public static int tp_str = 0;
- public static int tp_getattro = 0;
- public static int tp_setattro = 0;
- public static int tp_as_buffer = 0;
- public static int tp_flags = 0;
- public static int tp_doc = 0;
- public static int tp_traverse = 0;
- public static int tp_clear = 0;
- public static int tp_richcompare = 0;
- public static int tp_weaklistoffset = 0;
- public static int tp_iter = 0;
- public static int tp_iternext = 0;
- public static int tp_methods = 0;
- public static int tp_members = 0;
- public static int tp_getset = 0;
- public static int tp_base = 0;
- public static int tp_dict = 0;
- public static int tp_descr_get = 0;
- public static int tp_descr_set = 0;
- public static int tp_dictoffset = 0;
- public static int tp_init = 0;
- public static int tp_alloc = 0;
- public static int tp_new = 0;
- public static int tp_free = 0;
- public static int tp_is_gc = 0;
- public static int tp_bases = 0;
- public static int tp_mro = 0;
- public static int tp_cache = 0;
- public static int tp_subclasses = 0;
- public static int tp_weaklist = 0;
- public static int tp_del = 0;
- public static int tp_version_tag = 0;
- public static int tp_finalize = 0;
- public static int nb_add = 0;
- public static int nb_subtract = 0;
- public static int nb_multiply = 0;
- public static int nb_remainder = 0;
- public static int nb_divmod = 0;
- public static int nb_power = 0;
- public static int nb_negative = 0;
- public static int nb_positive = 0;
- public static int nb_absolute = 0;
- public static int nb_bool = 0;
- public static int nb_invert = 0;
- public static int nb_lshift = 0;
- public static int nb_rshift = 0;
- public static int nb_and = 0;
- public static int nb_xor = 0;
- public static int nb_or = 0;
- public static int nb_int = 0;
- public static int nb_reserved = 0;
- public static int nb_float = 0;
- public static int nb_inplace_add = 0;
- public static int nb_inplace_subtract = 0;
- public static int nb_inplace_multiply = 0;
- public static int nb_inplace_remainder = 0;
- public static int nb_inplace_power = 0;
- public static int nb_inplace_lshift = 0;
- public static int nb_inplace_rshift = 0;
- public static int nb_inplace_and = 0;
- public static int nb_inplace_xor = 0;
- public static int nb_inplace_or = 0;
- public static int nb_floor_divide = 0;
- public static int nb_true_divide = 0;
- public static int nb_inplace_floor_divide = 0;
- public static int nb_inplace_true_divide = 0;
- public static int nb_index = 0;
- public static int mp_length = 0;
- public static int mp_subscript = 0;
- public static int mp_ass_subscript = 0;
- public static int sq_length = 0;
- public static int sq_concat = 0;
- public static int sq_repeat = 0;
- public static int sq_item = 0;
- public static int was_sq_slice = 0;
- public static int sq_ass_item = 0;
- public static int was_sq_ass_slice = 0;
- public static int sq_contains = 0;
- public static int sq_inplace_concat = 0;
- public static int sq_inplace_repeat = 0;
- public static int bf_getbuffer = 0;
- public static int bf_releasebuffer = 0;
- public static int name = 0;
- public static int ht_slots = 0;
- public static int qualname = 0;
- public static int ht_cached_keys = 0;
-
- /* here are optional user slots, followed by the members. */
- public static int members = 0;
- }
-}
-
-#endif
diff --git a/src/runtime/interop35.cs b/src/runtime/interop35.cs
deleted file mode 100644
index a30bfa4fd..000000000
--- a/src/runtime/interop35.cs
+++ /dev/null
@@ -1,149 +0,0 @@
-// Auto-generated by geninterop.py.
-// DO NOT MODIFIY BY HAND.
-
-
-#if PYTHON35
-using System;
-using System.Collections;
-using System.Collections.Specialized;
-using System.Runtime.InteropServices;
-using System.Reflection;
-using System.Text;
-
-namespace Python.Runtime
-{
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
- internal class TypeOffset
- {
- static TypeOffset()
- {
- Type type = typeof(TypeOffset);
- FieldInfo[] fi = type.GetFields();
- int size = IntPtr.Size;
- for (int i = 0; i < fi.Length; i++)
- {
- fi[i].SetValue(null, i * size);
- }
- }
-
- public static int magic()
- {
- return ob_size;
- }
-
- // Auto-generated from PyHeapTypeObject in Python.h
- public static int ob_refcnt = 0;
- public static int ob_type = 0;
- public static int ob_size = 0;
- public static int tp_name = 0;
- public static int tp_basicsize = 0;
- public static int tp_itemsize = 0;
- public static int tp_dealloc = 0;
- public static int tp_print = 0;
- public static int tp_getattr = 0;
- public static int tp_setattr = 0;
- public static int tp_as_async = 0;
- public static int tp_repr = 0;
- public static int tp_as_number = 0;
- public static int tp_as_sequence = 0;
- public static int tp_as_mapping = 0;
- public static int tp_hash = 0;
- public static int tp_call = 0;
- public static int tp_str = 0;
- public static int tp_getattro = 0;
- public static int tp_setattro = 0;
- public static int tp_as_buffer = 0;
- public static int tp_flags = 0;
- public static int tp_doc = 0;
- public static int tp_traverse = 0;
- public static int tp_clear = 0;
- public static int tp_richcompare = 0;
- public static int tp_weaklistoffset = 0;
- public static int tp_iter = 0;
- public static int tp_iternext = 0;
- public static int tp_methods = 0;
- public static int tp_members = 0;
- public static int tp_getset = 0;
- public static int tp_base = 0;
- public static int tp_dict = 0;
- public static int tp_descr_get = 0;
- public static int tp_descr_set = 0;
- public static int tp_dictoffset = 0;
- public static int tp_init = 0;
- public static int tp_alloc = 0;
- public static int tp_new = 0;
- public static int tp_free = 0;
- public static int tp_is_gc = 0;
- public static int tp_bases = 0;
- public static int tp_mro = 0;
- public static int tp_cache = 0;
- public static int tp_subclasses = 0;
- public static int tp_weaklist = 0;
- public static int tp_del = 0;
- public static int tp_version_tag = 0;
- public static int tp_finalize = 0;
- public static int am_await = 0;
- public static int am_aiter = 0;
- public static int am_anext = 0;
- public static int nb_add = 0;
- public static int nb_subtract = 0;
- public static int nb_multiply = 0;
- public static int nb_remainder = 0;
- public static int nb_divmod = 0;
- public static int nb_power = 0;
- public static int nb_negative = 0;
- public static int nb_positive = 0;
- public static int nb_absolute = 0;
- public static int nb_bool = 0;
- public static int nb_invert = 0;
- public static int nb_lshift = 0;
- public static int nb_rshift = 0;
- public static int nb_and = 0;
- public static int nb_xor = 0;
- public static int nb_or = 0;
- public static int nb_int = 0;
- public static int nb_reserved = 0;
- public static int nb_float = 0;
- public static int nb_inplace_add = 0;
- public static int nb_inplace_subtract = 0;
- public static int nb_inplace_multiply = 0;
- public static int nb_inplace_remainder = 0;
- public static int nb_inplace_power = 0;
- public static int nb_inplace_lshift = 0;
- public static int nb_inplace_rshift = 0;
- public static int nb_inplace_and = 0;
- public static int nb_inplace_xor = 0;
- public static int nb_inplace_or = 0;
- public static int nb_floor_divide = 0;
- public static int nb_true_divide = 0;
- public static int nb_inplace_floor_divide = 0;
- public static int nb_inplace_true_divide = 0;
- public static int nb_index = 0;
- public static int nb_matrix_multiply = 0;
- public static int nb_inplace_matrix_multiply = 0;
- public static int mp_length = 0;
- public static int mp_subscript = 0;
- public static int mp_ass_subscript = 0;
- public static int sq_length = 0;
- public static int sq_concat = 0;
- public static int sq_repeat = 0;
- public static int sq_item = 0;
- public static int was_sq_slice = 0;
- public static int sq_ass_item = 0;
- public static int was_sq_ass_slice = 0;
- public static int sq_contains = 0;
- public static int sq_inplace_concat = 0;
- public static int sq_inplace_repeat = 0;
- public static int bf_getbuffer = 0;
- public static int bf_releasebuffer = 0;
- public static int name = 0;
- public static int ht_slots = 0;
- public static int qualname = 0;
- public static int ht_cached_keys = 0;
-
- /* here are optional user slots, followed by the members. */
- public static int members = 0;
- }
-}
-
-#endif
diff --git a/src/runtime/pybuffer.cs b/src/runtime/pybuffer.cs
index 978684c8d..eadf4e2a7 100644
--- a/src/runtime/pybuffer.cs
+++ b/src/runtime/pybuffer.cs
@@ -139,8 +139,6 @@ public void ToContiguous(IntPtr buf, BufferOrderStyle order)
{
if (disposedValue)
throw new ObjectDisposedException(nameof(PyBuffer));
- if (Runtime.PyVersion < new Version(3, 6))
- throw new NotSupportedException("ToContiguous requires at least Python 3.6");
if (Runtime.PyBuffer_ToContiguous(buf, ref _view, _view.len, OrderStyleToChar(order, true)) < 0)
throw new PythonException();