diff --git a/bob/extension/test_utils.py b/bob/extension/test_utils.py
index 73da7428e557aa975aff4f0c517c826a0b0c0541..09c73de22045ad7f681c4657d45570b2d53378cb 100644
--- a/bob/extension/test_utils.py
+++ b/bob/extension/test_utils.py
@@ -191,12 +191,12 @@ package-z
         ]
 
     # test linkage to pythonhosted.org
-    server = "https://pythonhosted.org/%s"
+    server = "https://pythonhosted.org/%s/"
     os.environ["BOB_DOCUMENTATION_SERVER"] = server
     result = link_documentation(additional_packages, stringio(f))
     expected = [
-        'https://docs.python.org/%d.%d' % sys.version_info[:2],
-        'http://matplotlib.org',
+        'https://docs.python.org/%d.%d/' % sys.version_info[:2],
+        'http://matplotlib.org/',
         'https://setuptools.readthedocs.io/en/latest/',
         server % 'bob.extension',
         server % 'gridtk',
@@ -205,12 +205,12 @@ package-z
     nose.tools.eq_(sorted(result), sorted(expected))
 
     # test idiap server
-    server = "https://www.idiap.ch/software/bob/docs/latest/bob/%s/master"
+    server = "https://www.idiap.ch/software/bob/docs/latest/bob/%s/master/"
     os.environ["BOB_DOCUMENTATION_SERVER"] = server
     result = link_documentation(additional_packages, stringio(f))
     expected = [
-        'https://docs.python.org/%d.%d' % sys.version_info[:2],
-        'http://matplotlib.org',
+        'https://docs.python.org/%d.%d/' % sys.version_info[:2],
+        'http://matplotlib.org/',
         'https://setuptools.readthedocs.io/en/latest/',
         server % 'bob.extension',
         server % 'gridtk',
diff --git a/bob/extension/utils.py b/bob/extension/utils.py
index 2ee440cae84e819c3754f8fa7b0a13778fe241a0..0eaf07f45b366e72e4ab61f88d88f8d23180b3ec 100644
--- a/bob/extension/utils.py
+++ b/bob/extension/utils.py
@@ -432,11 +432,12 @@ def link_documentation(additional_packages = ['python', 'numpy'], requirements_f
 
   # collect packages are automatically included in the list of indexes
   packages = []
+  version_re = re.compile(r'\s*[\<\>=]+\s*')
   if requirements_file is not None:
     if not isinstance(requirements_file, str) or \
         os.path.exists(requirements_file):
       requirements = load_requirements(requirements_file)
-      packages += [re.split(r'\s*[\<\>=]*\s*',k)[0] for k in requirements]
+      packages += [version_re.split(k)[0] for k in requirements]
   packages += additional_packages
 
 
@@ -514,7 +515,10 @@ def link_documentation(additional_packages = ['python', 'numpy'], requirements_f
   # transforms "(file:///path/to/dir  https://example.com/dir| http://bla )"
   # into ["file:///path/to/dir", "https://example.com/dir", "http://bla"]
   # so, trim eventual parenthesis/white-spaces and splits by white space or |
-  server = re.split(r'[|\s]+', server.strip('() '))
+  if server.strip():
+    server = re.split(r'[|\s]+', server.strip('() '))
+  else:
+    server = []
 
   # check if the packages have documentation on the server
   for p in packages: