diff --git a/Doc/library/struct.rst b/Doc/library/struct.rst
index bee154f..ee949d9 100644
--- a/Doc/library/struct.rst
+++ b/Doc/library/struct.rst
@@ -119,6 +119,15 @@
    the platform C compiler supports C :ctype:`long long`, or, on Windows,
    :ctype:`__int64`.  They are always available in standard modes.
 
+(4)
+   When attempting to pack a non-integer using any of the integer conversion
+   codes, if the non-integer has a :meth:`__index__` method then that method is
+   called to convert the argument to an integer before packing.
+
+   .. versionchanged:: 3.2
+      Use of the :meth:`__index__` method for non-integers is new in 3.2.
+
+
 A format character may be preceded by an integral repeat count.  For example,
 the format string ``'4h'`` means exactly the same as ``'hhhh'``.
 
diff --git a/Lib/test/test_struct.py b/Lib/test/test_struct.py
index 39ccb27..3d67abd 100644
--- a/Lib/test/test_struct.py
+++ b/Lib/test/test_struct.py
@@ -282,6 +282,23 @@
                                   struct.pack, self.format,
                                   NotAnInt)
 
+                # Objects with an '__index__' method should be allowed
+                # to pack as integers.
+                class Indexable(object):
+                    def __init__(self, value):
+                        self._value = value
+
+                    def __index__(self):
+                        return self._value
+
+                for obj in (Indexable(0), Indexable(10), Indexable(17),
+                            Indexable(42), Indexable(100), Indexable(127)):
+                    try:
+                        struct.pack(format, obj)
+                    except:
+                        self.fail("integer code pack failed on object "
+                                  "with '__index__' method")
+
         for code in integer_codes:
             for byteorder in byteorders:
                 if (byteorder in ('', '@') and code in ('q', 'Q') and
diff --git a/Misc/NEWS b/Misc/NEWS
index a1465d7..a15fa91 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -879,6 +879,11 @@
 Extension Modules
 -----------------
 
+- Issue #8300: When passing a non-integer argument to struct.pack with any
+  integer format code, struct.pack first attempts to convert the non-integer
+  using its __index__ method.  If that method is non-existent or raises
+  TypeError it goes on to try the __int__ method, as described below.
+
 - Issue #8142: Update libffi to the 3.0.9 release.
 
 - Issue #6949: Allow the _dbm extension to be built with db 4.8.x.
diff --git a/Modules/_struct.c b/Modules/_struct.c
index 43321a4..e21487d 100644
--- a/Modules/_struct.c
+++ b/Modules/_struct.c
@@ -97,12 +97,27 @@
 {
 	assert(v != NULL);
 	if (!PyLong_Check(v)) {
-		PyErr_SetString(StructError,
-				"required argument is not an integer");
-		return NULL;
+		/* Not an integer;  try to use __index__ to convert. */
+		if (PyIndex_Check(v)) {
+			v = PyNumber_Index(v);
+			if (v == NULL)
+				return NULL;
+			if (!PyLong_Check(v)) {
+				PyErr_SetString(PyExc_TypeError,
+						"__index__ method "
+						"returned non-integer");
+				return NULL;
+			}
+		}
+		else {
+			PyErr_SetString(StructError,
+					"required argument is not an integer");
+			return NULL;
+		}
 	}
+	else
+		Py_INCREF(v);
 
-	Py_INCREF(v);
 	return v;
 }
 
