diff --git a/pipdeps/pipdeps.py b/pipdeps/pipdeps.py
index 9fd4c15d3ff3757a859b9bb824968450639cf8ad..b42e161cdffb23f47bde48003679fec7639c71fe 100644
--- a/pipdeps/pipdeps.py
+++ b/pipdeps/pipdeps.py
@@ -328,53 +328,49 @@ def get_metadata(package, version):
             break
     return metadata
 
+def metadata_version(data):
+    """
+    Return metadata version or None
+    """
+    version = None
+    for line in data:
+        if 'Metadata-Version' in line.decode('utf-8'):
+            version = line.replace('Metadata-Version:', '').strip()
+            break
+    return version
+
+def validate_pyver(metadata):
+    """
+    Return True if python version satisfies
+    """
+    if metadata is None:
+        return None
+    mversion = metadata_version(metadata)
+    if mversion and is_in_specifiers(mversion, ['>=2.0']):
+        py_ver = ", ".join([line.replace('Requires-Python:', '').strip() \
+                            for line in metadata if re.search(r'^Requires-Python:', line)])
+        py_ver = py_ver.split(',')
+        if py_ver:
+            return is_in_specifiers(PY_VER, py_ver)
+    return True
+
 def parse_metadata(metadata, extra):
     """
     Return dependencies parsed from metadata
     """
     if metadata is None:
         return None
-    for line in metadata:
-        if 'Metadata-Version' in line.decode('utf-8'):
-            metadata_version = line.replace('Metadata-Version:', '').strip()
-            break
-    arr = []
-    if metadata_version and \
-       packaging.version.Version(metadata_version) >= packaging.version.Version('2.0'):
+    mversion = metadata_version(metadata)
+    if mversion and is_in_specifiers(mversion, ['>=2.0']):
         arr = []
         lines = [line.replace('Requires-Dist:', '').strip() \
                  for line in metadata if re.search(r'^Requires-Dist:', line)]
         for line in lines:
             data = pkginfo(str(line), req_extra=extra, repair=True)
             if data:
-                arr.append(pkginfo(str(line), req_extra=extra, repair=True))
+                arr.append(data)
     return arr
 
-def get_pkg_data():
-    """
-    Return package data
-    """
-    packages_data = {}
-    # pylint: disable=protected-access
-    for pkg in pip._internal.utils.misc.get_installed_distributions():
-        pkg_name, pkg_ver, _pkg_extra = pkginfo(str(pkg))
-        rev = {'installed_version': pkg_ver,
-               'requires': [pkginfo(str(dep), repair=True) for dep in pkg.requires()]}
-        packages_data[pkg_name] = rev
-    packages_data = insert_extras(packages_data)
-    packages_data = insert_availables(packages_data)
-    packages_data = insert_news(packages_data)
-
-    while True:
-        new_packages_data = new_packages(packages_data)
-        if not new_packages_data:
-            break
-        new_packages_data = insert_availables(new_packages_data)
-        new_packages_data = insert_news(new_packages_data)
-        packages_data = merge_two_dicts(packages_data, new_packages_data)
-    check_new_extras(packages_data)
-    return packages_data
-
 def pkginfo(data, req_extra=None, repair=False):
     """
     Return parsed pkginfo
@@ -418,6 +414,31 @@ def pkginfo(data, req_extra=None, repair=False):
         return None
     return (pkg_name.lower(), pkg_ver, pkg_extra)
 
+def get_pkg_data():
+    """
+    Return package data
+    """
+    packages_data = {}
+    # pylint: disable=protected-access
+    for pkg in pip._internal.utils.misc.get_installed_distributions():
+        pkg_name, pkg_ver, _pkg_extra = pkginfo(str(pkg))
+        rev = {'installed_version': pkg_ver,
+               'requires': [pkginfo(str(dep), repair=True) for dep in pkg.requires()]}
+        packages_data[pkg_name] = rev
+    packages_data = insert_extras(packages_data)
+    packages_data = insert_availables(packages_data)
+    packages_data = insert_news(packages_data)
+
+    while True:
+        new_packages_data = new_packages(packages_data)
+        if not new_packages_data:
+            break
+        new_packages_data = insert_availables(new_packages_data)
+        new_packages_data = insert_news(new_packages_data)
+        packages_data = merge_two_dicts(packages_data, new_packages_data)
+    check_new_extras(packages_data)
+    return packages_data
+
 def insert_extras(data):
     """
     Insert extras
@@ -474,8 +495,8 @@ def get_available_vers(package):
         if requires_python:
             requires_python = list(set(requires_python))
         if len(packagetype) == 1 and packagetype[0] == 'bdist_wheel' and len(python_version) == 1:
-            pyt_ver = re.search(r"^py([0-9])", python_version[0])
-            if pyt_ver is not None and not is_in_specifiers(PY_VER, [">= %s" % pyt_ver.group(1)]):
+            py_ver = re.search(r"^py([0-9])", python_version[0])
+            if py_ver is not None and not is_in_specifiers(PY_VER, [">= %s" % py_ver.group(1)]):
                 continue
         if is_version(release) and is_in_specifiers(PY_VER, requires_python):
             versions.append(release)
@@ -505,7 +526,12 @@ def insert_news(data):
         if new_version:
             res = {}
             for version in new_version:
-                content = parse_metadata(get_metadata(pkg, version), pkg_data['extras'])
+                metadata = get_metadata(pkg, version)
+                pyver_validation = validate_pyver(metadata)
+                if pyver_validation is not None and pyver_validation is False:
+                    pkg_data['available_version'].remove(version)
+                    continue
+                content = parse_metadata(metadata, pkg_data['extras'])
                 if content is not None:
                     res[version] = content
             if res: