diff --git a/lib/versioning/pep440/index.js b/lib/versioning/pep440/index.js
index a273053d3b74f07f91d7f6c816bee96cb56560c6..aaf904a38fbbffc75cb8079b3940ae1ceb98e85b 100644
--- a/lib/versioning/pep440/index.js
+++ b/lib/versioning/pep440/index.js
@@ -37,15 +37,20 @@ const minSatisfyingVersion = (versions, range) => {
   return found.length === 0 ? null : found[0];
 };
 
+const isSingleVersion = constraint =>
+  isVersion(constraint) ||
+  (constraint.startsWith('==') && isVersion(constraint.substring(2).trim()));
+
 module.exports = {
   equals,
   getMajor,
   getMinor,
   isGreaterThan,
-  isVersion,
+  isSingleVersion,
   isRange,
   isStable,
   isValid,
+  isVersion,
   matches,
   maxSatisfyingVersion,
   minSatisfyingVersion,
diff --git a/lib/versioning/semver/index.js b/lib/versioning/semver/index.js
index 2e9064b43cc67f42dcf850b2e291a622e85fe543..716624d65d0d1eedbcb6c54ecd93b1e4381b1cdb 100644
--- a/lib/versioning/semver/index.js
+++ b/lib/versioning/semver/index.js
@@ -29,6 +29,10 @@ const isRange = input => isValid(input) && !isVersion(input);
 // If this is left as an alias, inputs like "17.04.0" throw errors
 const isValid = input => validRange(input);
 
+const isSingleVersion = constraint =>
+  isVersion(constraint) ||
+  (constraint.startsWith('=') && isVersion(constraint.substring(1).trim()));
+
 module.exports = {
   equals,
   getMajor,
@@ -36,6 +40,7 @@ module.exports = {
   isGreaterThan,
   isLessThanRange,
   isRange,
+  isSingleVersion,
   isStable,
   isValid,
   isVersion,
diff --git a/test/versioning/pep440.spec.js b/test/versioning/pep440.spec.js
index 0f4cd2c4ccda8c7600daf9d5b5e682660a906846..8e945b59015b3f6867dbe0aa02e5ae9c58545877 100644
--- a/test/versioning/pep440.spec.js
+++ b/test/versioning/pep440.spec.js
@@ -45,6 +45,21 @@ describe('pep440.isStable(version)', () => {
   });
 });
 
+describe('pep440.isSingleVersion()', () => {
+  it('returns true if naked version', () => {
+    expect(!!pep440.isSingleVersion('1.2.3')).toBe(true);
+    expect(!!pep440.isSingleVersion('1.2.3rc0')).toBe(true);
+  });
+  it('returns true if double equals', () => {
+    expect(!!pep440.isSingleVersion('==1.2.3')).toBe(true);
+    expect(!!pep440.isSingleVersion('==1.2')).toBe(true);
+    expect(!!pep440.isSingleVersion('== 1.2.3')).toBe(true);
+  });
+  it('returns false when not version', () => {
+    expect(!!pep440.isSingleVersion('==1.*')).toBe(false);
+  });
+});
+
 const versions = [
   '0.9.4',
   '1.0.0',
diff --git a/test/versioning/semver.spec.js b/test/versioning/semver.spec.js
index fa2b4df48ea9c3e11ac6d80dbfbbbb5ae54cb034..e2a8a0f1e0f64d4c7e8ea82c46d41429e2af2b78 100644
--- a/test/versioning/semver.spec.js
+++ b/test/versioning/semver.spec.js
@@ -37,6 +37,19 @@ describe('semver.isRange(input)', () => {
     expect(!!semver.isRange('^1.2.3')).toBe(true);
   });
 });
+describe('semver.isSingleVersion()', () => {
+  it('returns true if naked version', () => {
+    expect(!!semver.isSingleVersion('1.2.3')).toBe(true);
+    expect(!!semver.isSingleVersion('1.2.3-alpha.1')).toBe(true);
+  });
+  it('returns true if equals', () => {
+    expect(!!semver.isSingleVersion('=1.2.3')).toBe(true);
+    expect(!!semver.isSingleVersion('= 1.2.3')).toBe(true);
+  });
+  it('returns false when not version', () => {
+    expect(!!semver.isSingleVersion('1.x')).toBe(false);
+  });
+});
 describe('semver.getNewValue()', () => {
   it('bumps equals', () => {
     expect(