diff --git a/src/sage/rings/padics/factory.py b/src/sage/rings/padics/factory.py
index d3a701decfe..2004f295d20 100644
--- a/src/sage/rings/padics/factory.py
+++ b/src/sage/rings/padics/factory.py
@@ -975,10 +975,10 @@ def Qq(q, prec=None, type='capped-rel', modulus=None, names=None,
 
     2. The modulus can also be given as a **symbolic expression**. ::
 
-        sage: x = var('x')
-        sage: X. = Qq(27, modulus = x^3 + 2*x + 1); X.modulus()
+        sage: x = var('x')                                                              # needs sage.symbolic
+        sage: X. = Qq(27, modulus = x^3 + 2*x + 1); X.modulus()                      # needs sage.symbolic
         (1 + O(3^20))*x^3 + O(3^20)*x^2 + (2 + O(3^20))*x + 1 + O(3^20)
-        sage: X == R
+        sage: X == R                                                                    # needs sage.symbolic
         True
 
       By default, the polynomial chosen is the standard lift of the
@@ -2225,10 +2225,10 @@ def Zq(q, prec=None, type='capped-rel', modulus=None, names=None,
 
     2. The modulus can also be given as a **symbolic expression**. ::
 
-        sage: x = var('x')
-        sage: X. = Zq(27, modulus = x^3 + 2*x + 1); X.modulus()
+        sage: x = var('x')                                                              # needs sage.symbolic
+        sage: X. = Zq(27, modulus = x^3 + 2*x + 1); X.modulus()                      # needs sage.symbolic
         (1 + O(3^20))*x^3 + O(3^20)*x^2 + (2 + O(3^20))*x + 1 + O(3^20)
-        sage: X == R
+        sage: X == R                                                                    # needs sage.symbolic
         True
 
       By default, the polynomial chosen is the standard lift of the
diff --git a/src/sage/rings/padics/local_generic.py b/src/sage/rings/padics/local_generic.py
index 21f3e458255..6dbebfb5347 100644
--- a/src/sage/rings/padics/local_generic.py
+++ b/src/sage/rings/padics/local_generic.py
@@ -1,4 +1,4 @@
-# sage.doctest: optional - sage.rings.padics
+# sage.doctest: needs sage.rings.padics
 r"""
 Local Generic
 
diff --git a/src/sage/rings/padics/local_generic_element.pyx b/src/sage/rings/padics/local_generic_element.pyx
index 5a757de50bb..6c78114f395 100644
--- a/src/sage/rings/padics/local_generic_element.pyx
+++ b/src/sage/rings/padics/local_generic_element.pyx
@@ -1,4 +1,4 @@
-# sage.doctest: optional - sage.rings.padics
+# sage.doctest: needs sage.rings.padics
 """
 Local Generic Element
 
diff --git a/src/sage/rings/padics/misc.py b/src/sage/rings/padics/misc.py
index d3c3a72083d..46b261c95dc 100644
--- a/src/sage/rings/padics/misc.py
+++ b/src/sage/rings/padics/misc.py
@@ -91,25 +91,25 @@ def gauss_sum(a, p, f, prec=20, factored=False, algorithm='pari', parent=None):
     In this example, we verify that `g_3(0) = -1`::
 
         sage: from sage.rings.padics.misc import gauss_sum
-        sage: -gauss_sum(0, 3, 1)                                                       # optional - sage.rings.padics
+        sage: -gauss_sum(0, 3, 1)                                                       # needs sage.rings.padics
         1 + O(pi^40)
 
     Next, we verify that `g_5(a) g_5(-a) = 5 (-1)^a`::
 
         sage: from sage.rings.padics.misc import gauss_sum
-        sage: gauss_sum(2,5,1)^2 - 5                                                    # optional - sage.rings.padics
+        sage: gauss_sum(2,5,1)^2 - 5                                                    # needs sage.rings.padics
         O(pi^84)
-        sage: gauss_sum(1,5,1)*gauss_sum(3,5,1) + 5                                     # optional - sage.rings.padics
+        sage: gauss_sum(1,5,1)*gauss_sum(3,5,1) + 5                                     # needs sage.rings.padics
         O(pi^84)
 
     Finally, we compute a non-trivial value::
 
         sage: from sage.rings.padics.misc import gauss_sum
-        sage: gauss_sum(2,13,2)                                                         # optional - sage.rings.padics
+        sage: gauss_sum(2,13,2)                                                         # needs sage.rings.padics
         6*pi^2 + 7*pi^14 + 11*pi^26 + 3*pi^62 + 6*pi^74 + 3*pi^86 + 5*pi^98 +
         pi^110 + 7*pi^134 + 9*pi^146 + 4*pi^158 + 6*pi^170 + 4*pi^194 +
         pi^206 + 6*pi^218 + 9*pi^230 + O(pi^242)
-        sage: gauss_sum(2,13,2, prec=5, factored=True)                                  # optional - sage.rings.padics
+        sage: gauss_sum(2,13,2, prec=5, factored=True)                                  # needs sage.rings.padics
         (2, 6 + 6*13 + 10*13^2 + O(13^5))
 
     .. SEEALSO::
diff --git a/src/sage/rings/padics/padic_base_generic.py b/src/sage/rings/padics/padic_base_generic.py
index 6be6bceec0a..56f241fd777 100644
--- a/src/sage/rings/padics/padic_base_generic.py
+++ b/src/sage/rings/padics/padic_base_generic.py
@@ -433,11 +433,11 @@ def plot(self, max_points=2500, **args):
 
         EXAMPLES::
 
-            sage: Zp(3).plot()
+            sage: Zp(3).plot()                                                          # needs sage.plot
             Graphics object consisting of 1 graphics primitive
-            sage: Zp(5).plot(max_points=625)
+            sage: Zp(5).plot(max_points=625)                                            # needs sage.plot
             Graphics object consisting of 1 graphics primitive
-            sage: Zp(23).plot(rgbcolor=(1,0,0))
+            sage: Zp(23).plot(rgbcolor=(1,0,0))                                         # needs sage.plot
             Graphics object consisting of 1 graphics primitive
         """
         if 'pointsize' not in args:
diff --git a/src/sage/rings/padics/padic_generic.py b/src/sage/rings/padics/padic_generic.py
index a4596240d57..34e92135b55 100644
--- a/src/sage/rings/padics/padic_generic.py
+++ b/src/sage/rings/padics/padic_generic.py
@@ -1,4 +1,4 @@
-# sage.doctest: optional - sage.rings.padics
+# sage.doctest: needs sage.rings.padics
 r"""
 `p`-adic Generic
 
@@ -36,7 +36,6 @@
 from sage.rings.ring import PrincipalIdealDomain
 from sage.rings.integer import Integer
 from sage.rings.infinity import Infinity
-from sage.rings.padics.padic_printing import pAdicPrinter
 from sage.rings.padics.precision_error import PrecisionError
 from sage.misc.cachefunc import cached_method
 from sage.structure.richcmp import richcmp_not_equal
@@ -59,6 +58,8 @@ def __init__(self, base, p, prec, print_mode, names, element_class, category=Non
 
             sage: R = Zp(17)  # indirect doctest
         """
+        from sage.rings.padics.padic_printing import pAdicPrinter
+
         if category is None:
             if self.is_field():
                 category = Fields()
@@ -1896,6 +1897,8 @@ def local_print_mode(obj, print_options, pos=None, ram_name=None):
 
         For more documentation see :class:`sage.structure.parent_gens.localvars`.
     """
+    from sage.rings.padics.padic_printing import pAdicPrinter
+
     if isinstance(print_options, str):
         print_options = {'mode': print_options}
     elif not isinstance(print_options, dict):
diff --git a/src/sage/rings/padics/padic_lattice_element.py b/src/sage/rings/padics/padic_lattice_element.py
index 141af863ef5..a8d9e507b90 100644
--- a/src/sage/rings/padics/padic_lattice_element.py
+++ b/src/sage/rings/padics/padic_lattice_element.py
@@ -17,10 +17,11 @@
     sage: R3 = QpLC(2)
     sage: R4 = QpLF(2)
 
-    sage: TestSuite(R1).run(skip=['_test_teichmuller', '_test_matrix_smith']) # long time
-    sage: TestSuite(R2).run(skip=['_test_teichmuller', '_test_matrix_smith']) # long time
-    sage: TestSuite(R3).run(skip=['_test_teichmuller', '_test_matrix_smith']) # long time
-    sage: TestSuite(R4).run(skip=['_test_teichmuller', '_test_matrix_smith']) # long time
+    sage: # long time
+    sage: TestSuite(R1).run(skip=['_test_teichmuller', '_test_matrix_smith'])
+    sage: TestSuite(R2).run(skip=['_test_teichmuller', '_test_matrix_smith'])
+    sage: TestSuite(R3).run(skip=['_test_teichmuller', '_test_matrix_smith'])
+    sage: TestSuite(R4).run(skip=['_test_teichmuller', '_test_matrix_smith'])
 """
 
 # ****************************************************************************
diff --git a/src/sage/rings/valuation/valuation.py b/src/sage/rings/valuation/valuation.py
index 40425b3dbe8..ed820abc78c 100644
--- a/src/sage/rings/valuation/valuation.py
+++ b/src/sage/rings/valuation/valuation.py
@@ -12,6 +12,7 @@
 
 Discrete valuations can be created on a variety of rings::
 
+    sage: # needs sage.rings.padics
     sage: ZZ.valuation(2)
     2-adic valuation
     sage: GaussianIntegers().valuation(3)
@@ -34,15 +35,15 @@
 ::
 
     sage: R. = QQ[]
-    sage: v = QQ.valuation(2)
-    sage: w = GaussValuation(R, v)
-    sage: w.augmentation(x, 3)
+    sage: v = QQ.valuation(2)                                                           # needs sage.rings.padics
+    sage: w = GaussValuation(R, v)                                                      # needs sage.rings.padics
+    sage: w.augmentation(x, 3)                                                          # needs sage.rings.padics
     [ Gauss valuation induced by 2-adic valuation, v(x) = 3 ]
 
 We can also define discrete pseudo-valuations, i.e., discrete valuations that
 send more than just zero to infinity::
 
-    sage: w.augmentation(x, infinity)
+    sage: w.augmentation(x, infinity)                                                   # needs sage.rings.padics
     [ Gauss valuation induced by 2-adic valuation, v(x) = +Infinity ]
 """
 # ****************************************************************************
@@ -71,12 +72,12 @@ class DiscretePseudoValuation(Morphism):
 
     EXAMPLES::
 
-        sage: v = ZZ.valuation(2); v # indirect doctest
+        sage: v = ZZ.valuation(2); v  # indirect doctest
         2-adic valuation
 
     TESTS::
 
-        sage: TestSuite(v).run() # long time
+        sage: TestSuite(v).run()  # long time
 
     """
     def __init__(self, parent):
@@ -84,7 +85,7 @@ def __init__(self, parent):
         TESTS::
 
             sage: from sage.rings.valuation.valuation import DiscretePseudoValuation
-            sage: isinstance(ZZ.valuation(2), DiscretePseudoValuation)
+            sage: isinstance(ZZ.valuation(2), DiscretePseudoValuation)                  # needs sage.rings.padics
             True
 
         """
@@ -96,6 +97,7 @@ def is_equivalent(self, f, g):
 
         EXAMPLES::
 
+            sage: # needs sage.rings.padics
             sage: v = QQ.valuation(2)
             sage: v.is_equivalent(2, 1)
             False
@@ -124,8 +126,8 @@ def __hash__(self):
 
         EXAMPLES::
 
-            sage: v = QQ.valuation(2)
-            sage: hash(v) == hash(v) # indirect doctest
+            sage: v = QQ.valuation(2)                                                   # needs sage.rings.padics
+            sage: hash(v) == hash(v)  # indirect doctest                                # needs sage.rings.padics
             True
 
         """
@@ -145,8 +147,8 @@ def _hash_(self):
 
         EXAMPLES::
 
-            sage: v = QQ.valuation(2)
-            sage: hash(v) == hash(v) # indirect doctest
+            sage: v = QQ.valuation(2)                                                   # needs sage.rings.padics
+            sage: hash(v) == hash(v)  # indirect doctest                                # needs sage.rings.padics
             True
 
         """
@@ -167,6 +169,7 @@ def _richcmp_(self, other, op):
 
         EXAMPLES::
 
+            sage: # needs sage.rings.padics
             sage: v = QQ.valuation(2)
             sage: v == v
             True
@@ -227,8 +230,8 @@ def _le_(self, other):
         EXAMPLES::
 
             sage: v = valuations.TrivialValuation(QQ)
-            sage: w = QQ.valuation(2)
-            sage: v <= w
+            sage: w = QQ.valuation(2)                                                   # needs sage.rings.padics
+            sage: v <= w                                                                # needs sage.rings.padics
             True
         """
         return other >= self
@@ -244,8 +247,8 @@ def _ge_(self, other):
         EXAMPLES::
 
             sage: v = valuations.TrivialValuation(QQ)
-            sage: w = QQ.valuation(2)
-            sage: v >= w
+            sage: w = QQ.valuation(2)                                                   # needs sage.rings.padics
+            sage: v >= w                                                                # needs sage.rings.padics
             False
         """
         if self == other:
@@ -269,7 +272,7 @@ def _test_valuation_inheritance(self, **options):
 
         EXAMPLES::
 
-            sage: QQ.valuation(2)._test_valuation_inheritance()
+            sage: QQ.valuation(2)._test_valuation_inheritance()                         # needs sage.rings.padics
         """
         tester = self._tester(**options)
         tester.assertNotEqual(isinstance(self, InfiniteDiscretePseudoValuation),
@@ -283,18 +286,18 @@ class InfiniteDiscretePseudoValuation(DiscretePseudoValuation):
 
     EXAMPLES::
 
-        sage: v = QQ.valuation(2)
+        sage: v = QQ.valuation(2)                                                       # needs sage.rings.padics
         sage: R. = QQ[]
-        sage: v = GaussValuation(R, v)
-        sage: w = v.augmentation(x, infinity); w # indirect doctest
+        sage: v = GaussValuation(R, v)                                                  # needs sage.rings.padics
+        sage: w = v.augmentation(x, infinity); w  # indirect doctest                    # needs sage.rings.padics
         [ Gauss valuation induced by 2-adic valuation, v(x) = +Infinity ]
 
     TESTS::
 
         sage: from sage.rings.valuation.valuation import InfiniteDiscretePseudoValuation
-        sage: isinstance(w, InfiniteDiscretePseudoValuation)
+        sage: isinstance(w, InfiniteDiscretePseudoValuation)                            # needs sage.rings.padics
         True
-        sage: TestSuite(w).run() # long time
+        sage: TestSuite(w).run()                # long time                             # needs sage.rings.padics
 
     """
     def is_discrete_valuation(self):
@@ -303,6 +306,7 @@ def is_discrete_valuation(self):
 
         EXAMPLES::
 
+            sage: # needs sage.rings.padics
             sage: v = QQ.valuation(2)
             sage: R. = QQ[]
             sage: v = GaussValuation(R, v)
@@ -341,7 +345,8 @@ def is_negative_pseudo_valuation(self):
         EXAMPLES::
 
             sage: R. = QQ[]
-            sage: v = GaussValuation(R, valuations.TrivialValuation(QQ)).augmentation(x, infinity)
+            sage: u = GaussValuation(R, valuations.TrivialValuation(QQ))
+            sage: v = u.augmentation(x, infinity)
             sage: v.is_negative_pseudo_valuation()
             False
             sage: K. = FunctionField(QQ)
@@ -359,18 +364,18 @@ class DiscreteValuation(DiscretePseudoValuation):
 
     EXAMPLES::
 
-        sage: v = QQ.valuation(2)
+        sage: v = QQ.valuation(2)                                                       # needs sage.rings.padics
         sage: R. = QQ[]
-        sage: v = GaussValuation(R, v)
-        sage: w = v.augmentation(x, 1337); w # indirect doctest
+        sage: v = GaussValuation(R, v)                                                  # needs sage.rings.padics
+        sage: w = v.augmentation(x, 1337); w  # indirect doctest                        # needs sage.rings.padics
         [ Gauss valuation induced by 2-adic valuation, v(x) = 1337 ]
 
     TESTS::
 
         sage: from sage.rings.valuation.valuation import DiscreteValuation
-        sage: isinstance(w, DiscreteValuation)
+        sage: isinstance(w, DiscreteValuation)                                          # needs sage.rings.padics
         True
-        sage: TestSuite(w).run() # long time
+        sage: TestSuite(w).run()                # long time                             # needs sage.rings.padics
 
     """
     def is_discrete_valuation(self):
@@ -431,12 +436,14 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
 
         EXAMPLES::
 
+            sage: # needs sage.rings.padics
             sage: v = QQ.valuation(2)
             sage: R. = QQ[]
             sage: v.mac_lane_approximants(x^2 + 1)
             [[ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1/2 ]]
             sage: v.mac_lane_approximants(x^2 + 1, required_precision=infinity)
-            [[ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1/2, v(x^2 + 1) = +Infinity ]]
+            [[ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1/2,
+               v(x^2 + 1) = +Infinity ]]
             sage: v.mac_lane_approximants(x^2 + x + 1)
             [[ Gauss valuation induced by 2-adic valuation, v(x^2 + x + 1) = +Infinity ]]
 
@@ -444,13 +451,13 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
         factor `x + 1` and an approximate factor `x + 1` (which is an
         approximation to `x - 1`)::
 
-            sage: v.mac_lane_approximants(x^2 - 1)
+            sage: v.mac_lane_approximants(x^2 - 1)                                      # needs sage.rings.padics
             [[ Gauss valuation induced by 2-adic valuation, v(x + 1) = +Infinity ],
              [ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1 ]]
 
         However, it needs to be squarefree::
 
-            sage: v.mac_lane_approximants(x^2)
+            sage: v.mac_lane_approximants(x^2)                                          # needs sage.rings.padics
             Traceback (most recent call last):
             ...
             ValueError: G must be squarefree
@@ -459,19 +466,20 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
 
         Some difficult cases provided by Mark van Hoeij::
 
+            sage: # needs sage.rings.finite_rings
             sage: k = GF(2)
             sage: K. = FunctionField(k)
             sage: R. = K[]
             sage: F = y^21 + x*y^20 + (x^3 + x + 1)*y^18 + (x^3 + 1)*y^17 + (x^4 + x)*y^16 + (x^7 + x^6 + x^3 + x + 1)*y^15 + x^7*y^14 + (x^8 + x^7 + x^6 + x^4 + x^3 + 1)*y^13 + (x^9 + x^8 + x^4 + 1)*y^12 + (x^11 + x^9 + x^8 + x^5 + x^4 + x^3 + x^2)*y^11 + (x^12 + x^9 + x^8 + x^7 + x^5 + x^3 + x + 1)*y^10 + (x^14 + x^13 + x^10 + x^9 + x^8 + x^7 + x^6 + x^3 + x^2 + 1)*y^9 + (x^13 + x^9 + x^8 + x^6 + x^4 + x^3 + x)*y^8 + (x^16 + x^15 + x^13 + x^12 + x^11 + x^7 + x^3 + x)*y^7 + (x^17 + x^16 + x^13 + x^9 + x^8 + x)*y^6 + (x^17 + x^16 + x^12 + x^7 + x^5 + x^2 + x + 1)*y^5 + (x^19 + x^16 + x^15 + x^12 + x^6 + x^5 + x^3 + 1)*y^4 + (x^18 + x^15 + x^12 + x^10 + x^9 + x^7 + x^4 + x)*y^3 + (x^22 + x^21 + x^20 + x^18 + x^13 + x^12 + x^9 + x^8 + x^7 + x^5 + x^4 + x^3)*y^2 + (x^23 + x^22 + x^20 + x^17 + x^15 + x^14 + x^12 + x^9)*y + x^25 + x^23 + x^19 + x^17 + x^15 + x^13 + x^11 + x^5
             sage: x = K._ring.gen()
             sage: v0 = K.valuation(GaussValuation(K._ring, valuations.TrivialValuation(k)).augmentation(x,1))
-            sage: v0.mac_lane_approximants(F, assume_squarefree=True) # assumes squarefree for speed
+            sage: v0.mac_lane_approximants(F, assume_squarefree=True)  # assumes squarefree for speed
             [[ Gauss valuation induced by (x)-adic valuation, v(y + x + 1) = 3/2 ],
              [ Gauss valuation induced by (x)-adic valuation, v(y) = 1 ],
              [ Gauss valuation induced by (x)-adic valuation, v(y) = 4/3 ],
              [ Gauss valuation induced by (x)-adic valuation, v(y^15 + y^13 + y^12 + y^10 + y^9 + y^8 + y^4 + y^3 + y^2 + y + 1) = 1 ]]
             sage: v0 = K.valuation(GaussValuation(K._ring, valuations.TrivialValuation(k)).augmentation(x+1,1))
-            sage: v0.mac_lane_approximants(F, assume_squarefree=True) # assumes squarefree for speed
+            sage: v0.mac_lane_approximants(F, assume_squarefree=True)  # assumes squarefree for speed
             [[ Gauss valuation induced by (x + 1)-adic valuation, v(y + x^2 + 1) = 7/2 ],
              [ Gauss valuation induced by (x + 1)-adic valuation, v(y) = 3/4 ],
              [ Gauss valuation induced by (x + 1)-adic valuation, v(y) = 7/2 ],
@@ -487,6 +495,7 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
 
         Cases with trivial residue field extensions::
 
+            sage: # needs sage.rings.padics
             sage: K. = FunctionField(QQ)
             sage: S. = K[]
             sage: F = y^2 - x^2 - x^3 - 3
@@ -499,46 +508,49 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
 
         Over a complete base field::
 
-            sage: k=Qp(2,10)
-            sage: v = k.valuation()
+            sage: k = Qp(2,10)                                                                      # needs sage.rings.padics
+            sage: v = k.valuation()                                                                 # needs sage.rings.padics
 
-            sage: R.=k[]
+            sage: # needs sage.rings.padics
+            sage: R. = k[]
             sage: G = x
             sage: v.mac_lane_approximants(G)
             [Gauss valuation induced by 2-adic valuation]
-            sage: v.mac_lane_approximants(G, required_precision = infinity)
+            sage: v.mac_lane_approximants(G, required_precision=infinity)
             [[ Gauss valuation induced by 2-adic valuation, v((1 + O(2^10))*x) = +Infinity ]]
 
-            sage: G = x^2 + 1
-            sage: v.mac_lane_approximants(G)
+            sage: G = x^2 + 1                                                                       # needs sage.rings.padics
+            sage: v.mac_lane_approximants(G)                                                        # needs sage.rings.padics
             [[ Gauss valuation induced by 2-adic valuation, v((1 + O(2^10))*x + 1 + O(2^10)) = 1/2 ]]
-            sage: v.mac_lane_approximants(G, required_precision = infinity)
-            [[ Gauss valuation induced by 2-adic valuation, v((1 + O(2^10))*x + 1 + O(2^10)) = 1/2, v((1 + O(2^10))*x^2 + 1 + O(2^10)) = +Infinity ]]
+            sage: v.mac_lane_approximants(G, required_precision=infinity)                           # needs sage.rings.padics
+            [[ Gauss valuation induced by 2-adic valuation, v((1 + O(2^10))*x + 1 + O(2^10)) = 1/2,
+               v((1 + O(2^10))*x^2 + 1 + O(2^10)) = +Infinity ]]
 
-            sage: G = x^4 + 2*x^3 + 2*x^2 - 2*x + 2
-            sage: v.mac_lane_approximants(G)
+            sage: G = x^4 + 2*x^3 + 2*x^2 - 2*x + 2                                                 # needs sage.rings.padics
+            sage: v.mac_lane_approximants(G)                                                        # needs sage.rings.padics
             [[ Gauss valuation induced by 2-adic valuation, v((1 + O(2^10))*x) = 1/4 ]]
-            sage: v.mac_lane_approximants(G, required_precision=infinity)
-            [[ Gauss valuation induced by 2-adic valuation, v((1 + O(2^10))*x) = 1/4, v((1 + O(2^10))*x^4 + (2 + O(2^11))*x^3 + (2 + O(2^11))*x^2 + (2 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7 + 2^8 + 2^9 + 2^10 + O(2^11))*x + 2 + O(2^11)) = +Infinity ]]
+            sage: v.mac_lane_approximants(G, required_precision=infinity)                           # needs sage.rings.padics
+            [[ Gauss valuation induced by 2-adic valuation, v((1 + O(2^10))*x) = 1/4,
+               v((1 + O(2^10))*x^4 + (2 + O(2^11))*x^3 + (2 + O(2^11))*x^2 + (2 + 2^2 + 2^3 + 2^4 + 2^5 + 2^6 + 2^7 + 2^8 + 2^9 + 2^10 + O(2^11))*x + 2 + O(2^11)) = +Infinity ]]
 
         The factorization of primes in the Gaussian integers can be read off
         the Mac Lane approximants::
 
-            sage: v0 = QQ.valuation(2)
+            sage: v0 = QQ.valuation(2)                                                              # needs sage.rings.padics
             sage: R. = QQ[]
             sage: G = x^2 + 1
-            sage: v0.mac_lane_approximants(G)
+            sage: v0.mac_lane_approximants(G)                                                       # needs sage.rings.padics
             [[ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1/2 ]]
 
-            sage: v0 = QQ.valuation(3)
-            sage: v0.mac_lane_approximants(G)
+            sage: v0 = QQ.valuation(3)                                                              # needs sage.rings.padics
+            sage: v0.mac_lane_approximants(G)                                                       # needs sage.rings.padics
             [[ Gauss valuation induced by 3-adic valuation, v(x^2 + 1) = +Infinity ]]
 
-            sage: v0 = QQ.valuation(5)
-            sage: v0.mac_lane_approximants(G)
+            sage: v0 = QQ.valuation(5)                                                              # needs sage.rings.padics
+            sage: v0.mac_lane_approximants(G)                                                       # needs sage.rings.padics
             [[ Gauss valuation induced by 5-adic valuation, v(x + 2) = 1 ],
              [ Gauss valuation induced by 5-adic valuation, v(x + 3) = 1 ]]
-            sage: v0.mac_lane_approximants(G, required_precision = 10)
+            sage: v0.mac_lane_approximants(G, required_precision=10)                                # needs sage.rings.padics
             [[ Gauss valuation induced by 5-adic valuation, v(x + 3116/237) = 10 ],
              [ Gauss valuation induced by 5-adic valuation, v(x - 3116/237) = 10 ]]
 
@@ -546,9 +558,10 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
         `\QQ[x]/(x^2+1)`, 5 factors `-(x - 2)(x + 2)`, this behaviour can be
         read off the Mac Lane approximants::
 
-            sage: k=Qp(5,4)
+            sage: # needs sage.rings.padics
+            sage: k = Qp(5,4)
             sage: v = k.valuation()
-            sage: R.=k[]
+            sage: R. = k[]
             sage: G = x^2 + 1
             sage: v1,v2 = v.mac_lane_approximants(G); v1,v2
             ([ Gauss valuation induced by 5-adic valuation, v((1 + O(5^4))*x + 2 + O(5^4)) = 1 ],
@@ -559,22 +572,23 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
 
         Note how the latter give a better approximation to the factors of `x^2 + 1`::
 
-            sage: v1.phi() * v2.phi() - G
+            sage: v1.phi() * v2.phi() - G                                                           # needs sage.rings.padics
             O(5^4)*x^2 + (5 + O(5^4))*x + 5 + O(5^4)
-            sage: w1.phi() * w2.phi() - G
+            sage: w1.phi() * w2.phi() - G                                                           # needs sage.rings.padics
             O(5^4)*x^2 + (5^2 + O(5^4))*x + 5^3 + O(5^4)
 
         In this example, the process stops with a factorization of `x^2 + 1`::
 
-            sage: v.mac_lane_approximants(G, required_precision=infinity)
+            sage: v.mac_lane_approximants(G, required_precision=infinity)                           # needs sage.rings.padics
             [[ Gauss valuation induced by 5-adic valuation, v((1 + O(5^4))*x + 2 + 5 + 2*5^2 + 5^3 + O(5^4)) = +Infinity ],
              [ Gauss valuation induced by 5-adic valuation, v((1 + O(5^4))*x + 3 + 3*5 + 2*5^2 + 3*5^3 + O(5^4)) = +Infinity ]]
 
         This obviously cannot happen over the rationals where we only get an
         approximate factorization::
 
+            sage: # needs sage.rings.padics
             sage: v = QQ.valuation(5)
-            sage: R.=QQ[]
+            sage: R. = QQ[]
             sage: G = x^2 + 1
             sage: v.mac_lane_approximants(G)
             [[ Gauss valuation induced by 5-adic valuation, v(x + 2) = 1 ],
@@ -586,9 +600,10 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
         Initial versions ran into problems with the trivial residue field
         extensions in this case::
 
-            sage: K = Qp(3, 20, print_mode='digits')
-            sage: R. = K[]
+            sage: K = Qp(3, 20, print_mode='digits')                                                # needs sage.rings.padics
+            sage: R. = K[]                                                                       # needs sage.rings.padics
 
+            sage: # needs sage.rings.padics
             sage: alpha = T^3/4
             sage: G = 3^3*T^3*(alpha^4 - alpha)^2 - (4*alpha^3 - 1)^3
             sage: G = G/G.leading_coefficient()
@@ -598,13 +613,14 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
         A similar example::
 
             sage: R. = QQ[]
-            sage: v = QQ.valuation(3)
-            sage: G = (x^3 + 3)^3 - 81
-            sage: v.mac_lane_approximants(G)
+            sage: v = QQ.valuation(3)                                                               # needs sage.rings.padics
+            sage: G = (x^3 + 3)^3 - 81                                                              # needs sage.rings.padics
+            sage: v.mac_lane_approximants(G)                                                        # needs sage.rings.padics
             [[ Gauss valuation induced by 3-adic valuation, v(x) = 1/3, v(x^3 + 3*x + 3) = 13/9 ]]
 
         Another problematic case::
 
+            sage: # needs sage.rings.number_field sage.rings.padics
             sage: R. = QQ[]
             sage: Delta = x^12 + 20*x^11 + 154*x^10 + 664*x^9 + 1873*x^8 + 3808*x^7 + 5980*x^6 + 7560*x^5 + 7799*x^4 + 6508*x^3 + 4290*x^2 + 2224*x + 887
             sage: K. = NumberField(x^6 + 108)
@@ -615,7 +631,7 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
             1
             sage: vK(theta)
             1/3
-            sage: G=Delta.change_ring(K)
+            sage: G = Delta.change_ring(K)
             sage: vK.mac_lane_approximants(G)
             [[ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1/4, v(x^4 + 1/2*theta^4 + 3*theta + 1) = 3/2 ],
              [ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1/4, v(x^4 + 1/2*theta^4 + theta + 1) = 3/2 ],
@@ -624,8 +640,8 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
         An easy case that produced the wrong error at some point::
 
             sage: R. = QQ[]
-            sage: v = QQ.valuation(2)
-            sage: v.mac_lane_approximants(x^2 - 1/2)
+            sage: v = QQ.valuation(2)                                                               # needs sage.rings.padics
+            sage: v.mac_lane_approximants(x^2 - 1/2)                                                # needs sage.rings.padics
             Traceback (most recent call last):
             ...
             ValueError: G must be integral
@@ -634,24 +650,29 @@ def mac_lane_approximants(self, G, assume_squarefree=False, require_final_EF=Tru
 
         ::
 
+            sage: # needs sage.rings.padics
             sage: R = ZpFM(3, 7, print_mode='terse')
             sage: S. = R[]
             sage: v = R.valuation()
             sage: f = x^4 + 234
-            sage: len(v.mac_lane_approximants(f, assume_squarefree=True)) # is_squarefree() is not properly implemented yet
+            sage: len(v.mac_lane_approximants(f,  # is_squarefree() is not properly implemented yet
+            ....:                             assume_squarefree=True))
             2
 
         ::
 
+            sage: # needs sage.rings.padics
             sage: R = ZpFM(2, 50, print_mode='terse')
             sage: S. = R[]
             sage: f = (x^32 + 16)*(x^32 + 16 + 2^16*x^2) + 2^34
             sage: v = R.valuation()
-            sage: len(v.mac_lane_approximants(f, assume_squarefree=True)) # is_squarefree() is not properly implemented yet
+            sage: len(v.mac_lane_approximants(f,  # is_squarefree() is not properly implemented yet
+            ....:                             assume_squarefree=True))
             2
 
         A case that triggered an assertion at some point::
 
+            sage: # needs sage.rings.padics
             sage: v = QQ.valuation(3)
             sage: R. = QQ[]
             sage: f = x^36 + 60552000*x^33 + 268157412*x^30 + 173881701*x^27 + 266324841*x^24 + 83125683*x^21 + 111803814*x^18 + 31925826*x^15 + 205726716*x^12 +17990262*x^9 + 351459648*x^6 + 127014399*x^3 + 359254116
@@ -784,10 +805,10 @@ def _pow(self, x, e, error):
 
         EXAMPLES::
 
-            sage: v = QQ.valuation(2)
-            sage: v._pow(2, 2, error=4)
+            sage: v = QQ.valuation(2)                                                   # needs sage.rings.padics
+            sage: v._pow(2, 2, error=4)                                                 # needs sage.rings.padics
             4
-            sage: v._pow(2, 1000, error=4)
+            sage: v._pow(2, 1000, error=4)                                              # needs sage.rings.padics
             0
 
         """
@@ -817,58 +838,66 @@ def mac_lane_approximant(self, G, valuation, approximants=None):
 
         EXAMPLES::
 
-            sage: v = QQ.valuation(2)
-            sage: R. = QQ[]
-            sage: G = x^2 + 1
+            sage: v = QQ.valuation(2)                                                   # needs sage.rings.padics
+            sage: R. = QQ[]                                                          # needs sage.rings.padics
+            sage: G = x^2 + 1                                                           # needs sage.rings.padics
 
         We can select an approximant by approximating it::
 
-            sage: w = GaussValuation(R, v).augmentation(x + 1, 1/2)
-            sage: v.mac_lane_approximant(G, w)
+            sage: w = GaussValuation(R, v).augmentation(x + 1, 1/2)                     # needs sage.rings.padics
+            sage: v.mac_lane_approximant(G, w)                                          # needs sage.rings.padics
             [ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1/2 ]
 
         As long as this is the only matching approximant, the approximation can
         be very coarse::
 
-            sage: w = GaussValuation(R, v)
-            sage: v.mac_lane_approximant(G, w)
+            sage: w = GaussValuation(R, v)                                              # needs sage.rings.padics
+            sage: v.mac_lane_approximant(G, w)                                          # needs sage.rings.padics
             [ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1/2 ]
 
         Or it can be very specific::
 
-            sage: w = GaussValuation(R, v).augmentation(x + 1, 1/2).augmentation(G, infinity)
-            sage: v.mac_lane_approximant(G, w)
+            sage: w = GaussValuation(R, v).augmentation(x + 1, 1/2).augmentation(G, infinity)       # needs sage.rings.padics
+            sage: v.mac_lane_approximant(G, w)                                          # needs sage.rings.padics
             [ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1/2 ]
 
         But it must be an approximation of an approximant::
 
-            sage: w = GaussValuation(R, v).augmentation(x, 1/2)
-            sage: v.mac_lane_approximant(G, w)
+            sage: w = GaussValuation(R, v).augmentation(x, 1/2)                         # needs sage.rings.padics
+            sage: v.mac_lane_approximant(G, w)                                          # needs sage.rings.padics
             Traceback (most recent call last):
             ...
-            ValueError: The valuation [ Gauss valuation induced by 2-adic valuation, v(x) = 1/2 ] is not an approximant for a valuation which extends 2-adic valuation with respect to x^2 + 1 since the valuation of x^2 + 1 does not increase in every step
+            ValueError: The valuation
+            [ Gauss valuation induced by 2-adic valuation, v(x) = 1/2 ] is
+            not an approximant for a valuation which extends 2-adic valuation
+            with respect to x^2 + 1 since the valuation of x^2 + 1
+            does not increase in every step
 
         The ``valuation`` must single out one approximant::
 
-            sage: G = x^2 - 1
-            sage: w = GaussValuation(R, v)
-            sage: v.mac_lane_approximant(G, w)
+            sage: G = x^2 - 1                                                           # needs sage.rings.padics
+            sage: w = GaussValuation(R, v)                                              # needs sage.rings.padics
+            sage: v.mac_lane_approximant(G, w)                                          # needs sage.rings.padics
             Traceback (most recent call last):
             ...
-            ValueError: The valuation Gauss valuation induced by 2-adic valuation does not approximate a unique extension of 2-adic valuation with respect to x^2 - 1
+            ValueError: The valuation Gauss valuation induced by 2-adic valuation
+            does not approximate a unique extension of 2-adic valuation
+            with respect to x^2 - 1
 
-            sage: w = GaussValuation(R, v).augmentation(x + 1, 1)
-            sage: v.mac_lane_approximant(G, w)
+            sage: w = GaussValuation(R, v).augmentation(x + 1, 1)                       # needs sage.rings.padics
+            sage: v.mac_lane_approximant(G, w)                                          # needs sage.rings.padics
             Traceback (most recent call last):
             ...
-            ValueError: The valuation [ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1 ] does not approximate a unique extension of 2-adic valuation with respect to x^2 - 1
+            ValueError: The valuation
+            [ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1 ] does not
+            approximate a unique extension of 2-adic valuation with respect to x^2 - 1
 
-            sage: w = GaussValuation(R, v).augmentation(x + 1, 2)
-            sage: v.mac_lane_approximant(G, w)
+            sage: w = GaussValuation(R, v).augmentation(x + 1, 2)                       # needs sage.rings.padics
+            sage: v.mac_lane_approximant(G, w)                                          # needs sage.rings.padics
             [ Gauss valuation induced by 2-adic valuation, v(x + 1) = +Infinity ]
 
-            sage: w = GaussValuation(R, v).augmentation(x + 3, 2)
-            sage: v.mac_lane_approximant(G, w)
+            sage: w = GaussValuation(R, v).augmentation(x + 3, 2)                       # needs sage.rings.padics
+            sage: v.mac_lane_approximant(G, w)                                          # needs sage.rings.padics
             [ Gauss valuation induced by 2-adic valuation, v(x + 1) = 1 ]
 
         """
@@ -928,24 +957,26 @@ def montes_factorization(self, G, assume_squarefree=False, required_precision=No
 
         EXAMPLES::
 
-            sage: k=Qp(5,4)
+            sage: # needs sage.rings.padics
+            sage: k = Qp(5,4)
             sage: v = k.valuation()
-            sage: R.=k[]
+            sage: R. = k[]
             sage: G = x^2 + 1
             sage: v.montes_factorization(G)
-            ((1 + O(5^4))*x + 2 + 5 + 2*5^2 + 5^3 + O(5^4)) * ((1 + O(5^4))*x + 3 + 3*5 + 2*5^2 + 3*5^3 + O(5^4))
+            ((1 + O(5^4))*x + 2 + 5 + 2*5^2 + 5^3 + O(5^4))
+             * ((1 + O(5^4))*x + 3 + 3*5 + 2*5^2 + 3*5^3 + O(5^4))
 
         The computation might not terminate over incomplete fields (in
         particular because the factors can not be represented there)::
 
             sage: R. = QQ[]
-            sage: v = QQ.valuation(2)
-            sage: v.montes_factorization(x^6 - 1)
+            sage: v = QQ.valuation(2)                                                   # needs sage.rings.padics
+            sage: v.montes_factorization(x^6 - 1)                                       # needs sage.rings.padics
             (x - 1) * (x + 1) * (x^2 - x + 1) * (x^2 + x + 1)
 
-            sage: v.montes_factorization(x^7 - 1) # not tested, does not terminate
+            sage: v.montes_factorization(x^7 - 1)       # not tested                    # needs sage.rings.padics
 
-            sage: v.montes_factorization(x^7 - 1, required_precision=5)
+            sage: v.montes_factorization(x^7 - 1, required_precision=5)                 # needs sage.rings.padics
             (x - 1) * (x^3 - 5*x^2 - 6*x - 1) * (x^3 + 6*x^2 + 5*x - 1)
 
         TESTS:
@@ -955,6 +986,7 @@ def montes_factorization(self, G, assume_squarefree=False, required_precision=No
         In this example, ``f`` factors as three factors of degree 50 over an
         unramified extension::
 
+            sage: # needs sage.rings.padics
             sage: R. = ZqFM(125)
             sage: S. = R[]
             sage: f = (x^6+2)^25 + 5
@@ -964,6 +996,7 @@ def montes_factorization(self, G, assume_squarefree=False, required_precision=No
 
         In this case, ``f`` factors into degrees 1, 2, and 5 over a totally ramified extension::
 
+            sage: # needs sage.rings.padics
             sage: R = Zp(5)
             sage: S. = R[]
             sage: R. = R.extension(w^3 + 5)
@@ -1033,8 +1066,8 @@ class MacLaneApproximantNode():
 
     TESTS::
 
-        sage: v = ZZ.valuation(3)
-        sage: v.extension(GaussianIntegers()) # indirect doctest
+        sage: v = ZZ.valuation(3)                                                       # needs sage.rings.padics
+        sage: v.extension(GaussianIntegers())  # indirect doctest                       # needs sage.rings.padics
         3-adic valuation
 
     """
@@ -1043,8 +1076,8 @@ def __init__(self, valuation, parent, ef, principal_part_bound, coefficients, va
         TESTS::
 
             sage: from sage.rings.valuation.valuation import MacLaneApproximantNode
-            sage: node = MacLaneApproximantNode(QQ.valuation(2), None, 1, None, None, None)
-            sage: TestSuite(node).run()
+            sage: node = MacLaneApproximantNode(QQ.valuation(2), None, 1, None, None, None)         # needs sage.rings.padics
+            sage: TestSuite(node).run()                                                 # needs sage.rings.padics
 
         """
         self.valuation = valuation
@@ -1061,6 +1094,7 @@ def __eq__(self, other):
 
         EXAMPLES::
 
+            sage: # needs sage.rings.padics
             sage: from sage.rings.valuation.valuation import MacLaneApproximantNode
             sage: n = MacLaneApproximantNode(QQ.valuation(2), None, 1, None, None, None)
             sage: m = MacLaneApproximantNode(QQ.valuation(3), None, 1, None, None, None)
@@ -1080,6 +1114,7 @@ def __ne__(self, other):
 
         EXAMPLES::
 
+            sage: # needs sage.rings.padics
             sage: from sage.rings.valuation.valuation import MacLaneApproximantNode
             sage: n = MacLaneApproximantNode(QQ.valuation(2), None, 1, None, None, None)
             sage: m = MacLaneApproximantNode(QQ.valuation(3), None, 1, None, None, None)
diff --git a/src/sage/rings/valuation/valuations_catalog.py b/src/sage/rings/valuation/valuations_catalog.py
index 69e064a10c1..64effaf13a6 100644
--- a/src/sage/rings/valuation/valuations_catalog.py
+++ b/src/sage/rings/valuation/valuations_catalog.py
@@ -1,5 +1,9 @@
-from sage.rings.padics.padic_valuation import pAdicValuation
-from sage.rings.function_field.valuation import FunctionFieldValuation
-from .gauss_valuation import GaussValuation
-from .trivial_valuation import TrivialDiscretePseudoValuation, TrivialPseudoValuation, TrivialValuation
-from .limit_valuation import LimitValuation
+from sage.misc.lazy_import import lazy_import
+
+lazy_import('sage.rings.padics.padic_valuation', 'pAdicValuation')
+lazy_import('sage.rings.function_field.valuation', 'FunctionFieldValuation')
+lazy_import('sage.rings.valuation.gauss_valuation', 'GaussValuation')
+lazy_import('sage.rings.valuation.trivial_valuation', ['TrivialDiscretePseudoValuation', 'TrivialPseudoValuation', 'TrivialValuation'])
+lazy_import('sage.rings.valuation.limit_valuation', 'LimitValuation')
+
+del lazy_import