@@ -171,25 +171,45 @@ def create_package_as_root(package):
171171 return dir_as_root
172172
173173
174- def satisfies_python_requirement (parsed_operator , py_version_str ):
174+ def satisfies_python_requirement (parsed_operator , py_version ):
175+ """Check if a package required python versions matches the one of the system
176+
177+ Args:
178+ parsed_operator (str): operator to compare by i.e. >, <=, ==
179+ py_version (str): The python version that is required by the package
180+
181+ Returns:
182+ bool: True if the version matches, False otherwise
183+ """
175184 # TODO: use python semver library to compare versions
176- operator_func = {
185+ operator = {
177186 ">" : gt ,
178187 "==" : eq ,
179188 "<" : lt ,
180189 "<=" : le ,
181190 ">=" : ge ,
182191 '!=' : ne ,
183- }[parsed_operator ]
192+ }
193+ operator_func = operator .get (parsed_operator )
184194 system_py_version_tuple = (sys .version_info [0 ], sys .version_info [1 ])
185- py_version_tuple = tuple (py_version_str .split ('.' )) # string tuple
195+ py_version_tuple = tuple (py_version .split ('.' )) # tuple of strings
196+
197+ # For wildcard versions like 3.9.*
186198 if py_version_tuple [- 1 ] == '*' :
187199 system_py_version_tuple = system_py_version_tuple [0 ]
188- py_version_tuple = int (py_version_tuple [0 ]) # int tuple
200+ py_version_tuple = int (py_version_tuple [0 ]) # tuple of integers
201+
202+ # For dev/alpha/beta/rc versions like 3.9.dev0
203+ elif not py_version_tuple [- 1 ].isdigit ():
204+ py_version_tuple = (int (py_version_tuple [0 ]), int (py_version_tuple [1 ]))
205+
206+ # For stable releases like 3.9.2
189207 else :
190- py_version_tuple = tuple (int (x ) for x in py_version_tuple ) # int tuple
208+ py_version_tuple = tuple (int (x ) for x in py_version_tuple )
209+
210+ result = operator_func (system_py_version_tuple , py_version_tuple )
191211
192- return operator_func ( system_py_version_tuple , py_version_tuple )
212+ return result
193213
194214
195215def get_markers_text (requirement ):
0 commit comments