diff --git a/.gitignore b/.gitignore
index 0fc8784f..eed8783b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,4 +1,4 @@
-poliastro.nja
+*.nja
 .idea
 .cache
 
@@ -18,3 +18,4 @@ build
 .coverage
 
 __pycache__/
+.eggs/
diff --git a/.travis.yml b/.travis.yml
index e6100c7f..fea35c4b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -25,6 +25,7 @@ before_install:
   - if [[ "$(uname)" == "Linux" ]]; then wget http://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh; fi
   - bash miniconda.sh -b -p $HOME/miniconda
   - export PATH="$HOME/miniconda/bin:$PATH"
+  - export MPLBACKEND="agg"
 
   # Update conda and create test environment
   - conda config --set always_yes yes --set changeps1 no
@@ -33,23 +34,27 @@ before_install:
   - conda create -q -n test-environment python=$PYTHON
   - source activate test-environment
 
-  # Install project requirements
-  - conda install numpy numba>=0.23 astropy>=1.0 matplotlib scipy jplephem pandoc
-  - pip install coverage pytest pytest-cov codecov pytest-benchmark sphinx sphinx_rtd_theme nbsphinx IPython ipykernel 
+  # Install problematic dependencies
+  - conda install pandoc
 
 install:
-  - pip install --no-deps .  # Test installation correctness
+  - pip install numpy  # Required
+  - pip install .  # Test installation correctness
+  - pip install sphinx sphinx_rtd_theme nbsphinx ipython  # Install documentation dependencies
 
 script:
-  - pytest -vv --benchmark-skip  # Test against installed code
+  - python setup.py test -vv  # Test against installed code
   - sphinx-build -vW -b html docs/source _HTMLTest #Test docs build
+
 after_success:
   # Uninstall to test coverage against sources
   - pip uninstall poliastro -y
-  - pip install --no-deps -e .
+  - pip install -e .
 
-  - NUMBA_DISABLE_JIT=1 pytest --cov --benchmark-skip
+  - NUMBA_DISABLE_JIT=1 python setup.py test --cov
 
+  # Publish coverage
+  - pip install codecov
   - codecov
 
 sudo: false
diff --git a/appveyor.yml b/appveyor.yml
index b91a8310..fe35a536 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -38,11 +38,11 @@ install:
   - "pip install pytest codecov pytest-benchmark sphinx sphinx_rtd_theme nbsphinx IPython ipykernel"
 
   # Install dependencies
-  - "conda install -q numpy numba>=0.23 astropy>=1.0 matplotlib scipy jplephem pandoc"
+  - "conda install -q numpy scipy pandoc"
   - "pip install ."  # Test installation correctness
   
 build: off
 
 test_script:
   - "pytest -vv --benchmark-skip"  # Test against installed code
-  - "sphinx-build -vW -b html docs/source _HTMLTest" # Test docs build
\ No newline at end of file
+  - "sphinx-build -vW -b html docs/source _HTMLTest" # Test docs build
diff --git a/setup.cfg b/setup.cfg
index dfa63cf3..0e1fa302 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -5,4 +5,4 @@ norecursedirs =
     build
 python_files =
     test_*.py
-addopts = --benchmark-autosave
+doctest_plus = disabled
diff --git a/setup.py b/setup.py
index 43d30884..a084e848 100644
--- a/setup.py
+++ b/setup.py
@@ -2,14 +2,30 @@
 # coding: utf-8
 
 # http://stackoverflow.com/a/10975371/554319
+import os
 import io
+import sys
 from setuptools import setup, find_packages
+from setuptools.command.test import test
+
+
+# https://packaging.python.org/guides/single-sourcing-package-version/
+version = {}
+with open(os.path.join("src", "poliastro", "__init__.py")) as fp:
+    exec(fp.read(), version)
+
+
+# https://docs.pytest.org/en/latest/goodpractices.html#manual-integration
+class PyTest(test):
+    def run_tests(self):
+        import pytest
+        sys.exit(pytest.main([]))
 
 
 # http://blog.ionelmc.ro/2014/05/25/python-packaging/
 setup(
     name="poliastro",
-    version='0.7.dev0',
+    version=version['__version__'],
     description="Python package for Orbital Mechanics",
     author="Juan Luis Cano",
     author_email="hello@juanlu.space",
@@ -23,17 +39,20 @@ setup(
     python_requires=">=3.5",
     install_requires=[
         "numpy",
-        "numba>=0.25",
-        "astropy>=1.2",
+        "astropy>=1.2,!=2.0.0",
         "matplotlib",
         "jplephem",
         "scipy",
-        "bs4",
-        "requests"
+        "beautifulsoup4",
+        "requests",
     ],
     tests_require=[
-        "pytest"
+        "coverage",
+        "pytest-cov",
     ],
+    extras_require={
+        'fast': ["numba>=0.25"],
+    },
     packages=find_packages('src'),
     package_dir={'': 'src'},
     entry_points={},
@@ -56,4 +75,5 @@ setup(
     package_data={"poliastro": ['tests/*.py']},
     include_package_data=True,
     zip_safe=False,
+    cmdclass={'test': PyTest},
 )

Fix master
I made a trivial change in master, and some numerical comparisons failed:

https://travis-ci.org/poliastro/poliastro/builds/251342947

I suspect there has been some update in Astropy, but I don't have enough debugging information right now.
diff --git a/src/poliastro/tests/test_maneuver.py b/src/poliastro/tests/test_maneuver.py
index ccf6d7ba..4f9c975d 100644
--- a/src/poliastro/tests/test_maneuver.py
+++ b/src/poliastro/tests/test_maneuver.py
@@ -55,9 +55,9 @@ def test_hohmann_maneuver():
 
     man = Maneuver.hohmann(ss_i, Earth.R + alt_f)
 
-    assert_quantity_allclose(ss_i.apply_maneuver(man).ecc, 0 * u.one, atol=1e-15 * u.one)
-    assert_quantity_allclose(man.get_total_cost(), expected_dv, rtol=1e-6)
-    assert_quantity_allclose(man.get_total_time(), expected_t_trans, rtol=1e-6)
+    assert_quantity_allclose(ss_i.apply_maneuver(man).ecc, 0 * u.one, atol=1e-14 * u.one)
+    assert_quantity_allclose(man.get_total_cost(), expected_dv, rtol=1e-5)
+    assert_quantity_allclose(man.get_total_time(), expected_t_trans, rtol=1e-5)
 
 
 def test_bielliptic_maneuver():
@@ -72,5 +72,5 @@ def test_bielliptic_maneuver():
     man = Maneuver.bielliptic(ss_i, Earth.R + alt_b, Earth.R + alt_f)
 
     assert_allclose(ss_i.apply_maneuver(man).ecc, 0 * u.one, atol=1e-12 * u.one)
-    assert_quantity_allclose(man.get_total_cost(), expected_dv, rtol=1e-6)
+    assert_quantity_allclose(man.get_total_cost(), expected_dv, rtol=1e-5)
     assert_quantity_allclose(man.get_total_time(), expected_t_trans, rtol=1e-6)

environment.yml
pip install -e .
parse_log_pytest
environment.yml
pytest
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster @ file:///home/ktietz/src/ci/alabaster_1611921544520/work
astropy==4.0.2
async-generator @ file:///home/ktietz/src/ci/async_generator_1611927993394/work
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
Babel @ file:///tmp/build/80754af9/babel_1620871417480/work
backcall @ file:///home/ktietz/src/ci/backcall_1611930011877/work
beautifulsoup4 @ file:///home/conda/feedstock_root/build_artifacts/beautifulsoup4_1705564648255/work
bleach @ file:///opt/conda/conda-bld/bleach_1641577558959/work
brotlipy==0.7.0
bs4==0.0.2
certifi==2021.5.30
cffi @ file:///tmp/build/80754af9/cffi_1625814693874/work
charset-normalizer @ file:///tmp/build/80754af9/charset-normalizer_1630003229654/work
colorama @ file:///tmp/build/80754af9/colorama_1607707115595/work
cryptography @ file:///tmp/build/80754af9/cryptography_1635366128178/work
cycler @ file:///tmp/build/80754af9/cycler_1637851556182/work
decorator @ file:///opt/conda/conda-bld/decorator_1643638310831/work
defusedxml @ file:///tmp/build/80754af9/defusedxml_1615228127516/work
docutils @ file:///tmp/build/80754af9/docutils_1620827982266/work
entrypoints==0.3
idna @ file:///tmp/build/80754af9/idna_1637925883363/work
imagesize @ file:///tmp/build/80754af9/imagesize_1637939814114/work
importlib-metadata @ file:///tmp/build/80754af9/importlib-metadata_1631916693255/work
iniconfig==1.1.1
ipykernel @ file:///tmp/build/80754af9/ipykernel_1596206602906/work/dist/ipykernel-5.3.4-py3-none-any.whl
ipython @ file:///tmp/build/80754af9/ipython_1593447367857/work
ipython-genutils @ file:///tmp/build/80754af9/ipython_genutils_1606773439826/work
jedi @ file:///tmp/build/80754af9/jedi_1606932572482/work
Jinja2 @ file:///opt/conda/conda-bld/jinja2_1647436528585/work
jplephem @ file:///home/conda/feedstock_root/build_artifacts/jplephem_1701439151942/work
jsonschema @ file:///Users/ktietz/demo/mc3/conda-bld/jsonschema_1630511932244/work
jupyter-client @ file:///opt/conda/conda-bld/jupyter_client_1643638337975/work
jupyter-core @ file:///tmp/build/80754af9/jupyter_core_1633420100582/work
jupyterlab-pygments @ file:///tmp/build/80754af9/jupyterlab_pygments_1601490720602/work
kiwisolver @ file:///tmp/build/80754af9/kiwisolver_1612282412546/work
llvmlite==0.36.0
MarkupSafe @ file:///tmp/build/80754af9/markupsafe_1621528150516/work
matplotlib @ file:///tmp/build/80754af9/matplotlib-suite_1613407855456/work
mistune==0.8.4
nbclient @ file:///tmp/build/80754af9/nbclient_1614364831625/work
nbconvert @ file:///tmp/build/80754af9/nbconvert_1601914804165/work
nbformat @ file:///tmp/build/80754af9/nbformat_1617383369282/work
nbsphinx @ file:///home/conda/feedstock_root/build_artifacts/nbsphinx_1741075436613/work
nest-asyncio @ file:///tmp/build/80754af9/nest-asyncio_1613680548246/work
numba @ file:///tmp/build/80754af9/numba_1616771968628/work
numpy @ file:///tmp/build/80754af9/numpy_and_numpy_base_1603483703303/work
olefile @ file:///Users/ktietz/demo/mc3/conda-bld/olefile_1629805411829/work
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pandocfilters @ file:///opt/conda/conda-bld/pandocfilters_1643405455980/work
parso==0.7.0
pexpect @ file:///tmp/build/80754af9/pexpect_1605563209008/work
pickleshare @ file:///tmp/build/80754af9/pickleshare_1606932040724/work
Pillow @ file:///tmp/build/80754af9/pillow_1625670622947/work
pluggy==1.0.0
-e git+https://github.com/poliastro/poliastro.git@cb499812249311a186d1dee9432c3280baa59061#egg=poliastro
prompt-toolkit @ file:///tmp/build/80754af9/prompt-toolkit_1633440160888/work
ptyprocess @ file:///tmp/build/80754af9/ptyprocess_1609355006118/work/dist/ptyprocess-0.7.0-py2.py3-none-any.whl
py==1.11.0
pycparser @ file:///tmp/build/80754af9/pycparser_1636541352034/work
Pygments @ file:///opt/conda/conda-bld/pygments_1644249106324/work
pyOpenSSL @ file:///opt/conda/conda-bld/pyopenssl_1643788558760/work
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pyrsistent @ file:///tmp/build/80754af9/pyrsistent_1600141725711/work
PySocks @ file:///tmp/build/80754af9/pysocks_1605305763431/work
pytest==7.0.1
python-dateutil @ file:///tmp/build/80754af9/python-dateutil_1626374649649/work
pytz==2021.3
pyzmq @ file:///tmp/build/80754af9/pyzmq_1628268400816/work
requests @ file:///opt/conda/conda-bld/requests_1641824580448/work
scipy @ file:///tmp/build/80754af9/scipy_1597686635649/work
six @ file:///tmp/build/80754af9/six_1644875935023/work
snowballstemmer @ file:///tmp/build/80754af9/snowballstemmer_1637937080595/work
soupsieve @ file:///tmp/build/80754af9/soupsieve_1636706018808/work
Sphinx @ file:///opt/conda/conda-bld/sphinx_1643644169832/work
sphinxcontrib-applehelp @ file:///home/ktietz/src/ci/sphinxcontrib-applehelp_1611920841464/work
sphinxcontrib-devhelp @ file:///home/ktietz/src/ci/sphinxcontrib-devhelp_1611920923094/work
sphinxcontrib-htmlhelp @ file:///tmp/build/80754af9/sphinxcontrib-htmlhelp_1623945626792/work
sphinxcontrib-jsmath @ file:///home/ktietz/src/ci/sphinxcontrib-jsmath_1611920942228/work
sphinxcontrib-qthelp @ file:///home/ktietz/src/ci/sphinxcontrib-qthelp_1611921055322/work
sphinxcontrib-serializinghtml @ file:///tmp/build/80754af9/sphinxcontrib-serializinghtml_1624451540180/work
testpath @ file:///tmp/build/80754af9/testpath_1624638946665/work
tomli==1.2.3
tornado @ file:///tmp/build/80754af9/tornado_1606942266872/work
traitlets @ file:///tmp/build/80754af9/traitlets_1632746497744/work
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3 @ file:///opt/conda/conda-bld/urllib3_1643638302206/work
wcwidth @ file:///Users/ktietz/demo/mc3/conda-bld/wcwidth_1629357192024/work
webencodings==0.5.1
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: poliastro
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - alabaster=0.7.12=pyhd3eb1b0_0
  - astropy=4.0.2=py36h7b6447c_0
  - async_generator=1.10=pyhd3eb1b0_0
  - attrs=21.4.0=pyhd3eb1b0_0
  - babel=2.9.1=pyhd3eb1b0_0
  - backcall=0.2.0=pyhd3eb1b0_0
  - beautifulsoup4=4.12.3=pyha770c72_0
  - blas=1.0=openblas
  - bleach=4.1.0=pyhd3eb1b0_0
  - brotlipy=0.7.0=py36h27cfd23_1003
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - cffi=1.14.6=py36h400218f_0
  - charset-normalizer=2.0.4=pyhd3eb1b0_0
  - colorama=0.4.4=pyhd3eb1b0_0
  - cryptography=35.0.0=py36hd23ed53_0
  - cycler=0.11.0=pyhd3eb1b0_0
  - dbus=1.13.18=hb2f20db_0
  - decorator=5.1.1=pyhd3eb1b0_0
  - defusedxml=0.7.1=pyhd3eb1b0_0
  - docutils=0.17.1=py36h06a4308_1
  - entrypoints=0.3=py36_0
  - expat=2.6.4=h6a678d5_0
  - fontconfig=2.14.1=h52c9d5c_1
  - freetype=2.12.1=h4a9f257_0
  - giflib=5.2.2=h5eee18b_0
  - glib=2.69.1=h4ff587b_1
  - gst-plugins-base=1.14.1=h6a678d5_1
  - gstreamer=1.14.1=h5eee18b_1
  - icu=58.2=he6710b0_3
  - idna=3.3=pyhd3eb1b0_0
  - imagesize=1.3.0=pyhd3eb1b0_0
  - importlib-metadata=4.8.1=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - ipykernel=5.3.4=py36h5ca1d4c_0
  - ipython=7.16.1=py36h5ca1d4c_0
  - ipython_genutils=0.2.0=pyhd3eb1b0_1
  - jedi=0.17.2=py36h06a4308_1
  - jinja2=3.0.3=pyhd3eb1b0_0
  - jpeg=9e=h5eee18b_3
  - jplephem=2.21=pyh864a33b_0
  - jsonschema=3.2.0=pyhd3eb1b0_2
  - jupyter_client=7.1.2=pyhd3eb1b0_0
  - jupyter_core=4.8.1=py36h06a4308_0
  - jupyterlab_pygments=0.1.2=py_0
  - kiwisolver=1.3.1=py36h2531618_0
  - lcms2=2.16=hb9589c4_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - lerc=4.0.0=h6a678d5_0
  - libdeflate=1.22=h5eee18b_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgfortran-ng=7.5.0=ha8ba4b0_17
  - libgfortran4=7.5.0=ha8ba4b0_17
  - libgomp=11.2.0=h1234567_1
  - libllvm10=10.0.1=hbcb73fb_5
  - libopenblas=0.3.18=hf726d26_0
  - libpng=1.6.39=h5eee18b_0
  - libsodium=1.0.18=h7b6447c_0
  - libstdcxx-ng=11.2.0=h1234567_1
  - libtiff=4.5.1=hffd6297_1
  - libuuid=1.41.5=h5eee18b_0
  - libwebp=1.2.4=h11a3e52_1
  - libwebp-base=1.2.4=h5eee18b_1
  - libxcb=1.15=h7f8727e_0
  - libxml2=2.9.14=h74e7548_0
  - llvmlite=0.36.0=py36h612dafd_4
  - lz4-c=1.9.4=h6a678d5_1
  - markupsafe=2.0.1=py36h27cfd23_0
  - matplotlib=3.3.4=py36h06a4308_0
  - matplotlib-base=3.3.4=py36h62a2d02_0
  - mistune=0.8.4=py36h7b6447c_0
  - nbclient=0.5.3=pyhd3eb1b0_0
  - nbconvert=6.0.7=py36_0
  - nbformat=5.1.3=pyhd3eb1b0_0
  - nbsphinx=0.9.7=pyhd8ed1ab_0
  - ncurses=6.4=h6a678d5_0
  - nest-asyncio=1.5.1=pyhd3eb1b0_0
  - numba=0.53.1=py36ha9443f7_0
  - numpy=1.19.2=py36h6163131_0
  - numpy-base=1.19.2=py36h75fe3a5_0
  - olefile=0.46=pyhd3eb1b0_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pandoc=2.12=h06a4308_3
  - pandocfilters=1.5.0=pyhd3eb1b0_0
  - parso=0.7.0=py_0
  - pcre=8.45=h295c915_0
  - pexpect=4.8.0=pyhd3eb1b0_3
  - pickleshare=0.7.5=pyhd3eb1b0_1003
  - pillow=8.3.1=py36h5aabda8_0
  - pip=21.2.2=py36h06a4308_0
  - prompt-toolkit=3.0.20=pyhd3eb1b0_0
  - ptyprocess=0.7.0=pyhd3eb1b0_2
  - pycparser=2.21=pyhd3eb1b0_0
  - pygments=2.11.2=pyhd3eb1b0_0
  - pyopenssl=22.0.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pyqt=5.9.2=py36h05f1152_2
  - pyrsistent=0.17.3=py36h7b6447c_0
  - pysocks=1.7.1=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - python-dateutil=2.8.2=pyhd3eb1b0_0
  - pytz=2021.3=pyhd3eb1b0_0
  - pyzmq=22.2.1=py36h295c915_1
  - qt=5.9.7=h5867ecd_1
  - readline=8.2=h5eee18b_0
  - requests=2.27.1=pyhd3eb1b0_0
  - scipy=1.5.2=py36habc2bb6_0
  - setuptools=58.0.4=py36h06a4308_0
  - sip=4.19.8=py36hf484d3e_0
  - six=1.16.0=pyhd3eb1b0_1
  - snowballstemmer=2.2.0=pyhd3eb1b0_0
  - soupsieve=2.3.1=pyhd3eb1b0_0
  - sphinx=4.4.0=pyhd3eb1b0_0
  - sphinxcontrib-applehelp=1.0.2=pyhd3eb1b0_0
  - sphinxcontrib-devhelp=1.0.2=pyhd3eb1b0_0
  - sphinxcontrib-htmlhelp=2.0.0=pyhd3eb1b0_0
  - sphinxcontrib-jsmath=1.0.1=pyhd3eb1b0_0
  - sphinxcontrib-qthelp=1.0.3=pyhd3eb1b0_0
  - sphinxcontrib-serializinghtml=1.1.5=pyhd3eb1b0_0
  - sqlite=3.45.3=h5eee18b_0
  - tbb=2020.3=hfd86e86_0
  - testpath=0.5.0=pyhd3eb1b0_0
  - tk=8.6.14=h39e8969_0
  - tornado=6.1=py36h27cfd23_0
  - traitlets=4.3.3=py36h06a4308_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - urllib3=1.26.8=pyhd3eb1b0_0
  - wcwidth=0.2.5=pyhd3eb1b0_0
  - webencodings=0.5.1=py36_1
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zeromq=4.3.5=h6a678d5_0
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - zstd=1.5.6=hc292b87_0
  - pip:
      - bs4==0.0.2
      - iniconfig==1.1.1
      - pluggy==1.0.0
      - py==1.11.0
      - pytest==7.0.1
      - tomli==1.2.3
prefix: /opt/conda/envs/poliastro

src/poliastro/tests/test_maneuver.py::test_maneuver_raises_error_if_units_are_wrong src/poliastro/tests/test_maneuver.py::test_maneuver_raises_error_if_dvs_are_not_vectors src/poliastro/tests/test_maneuver.py::test_maneuver_total_time src/poliastro/tests/test_maneuver.py::test_maneuver_impulse src/poliastro/tests/test_maneuver.py::test_hohmann_maneuver src/poliastro/tests/test_maneuver.py::test_bielliptic_maneuver
setup.py .gitignore .travis.yml setup.cfg appveyor.yml
setup.py .gitignore .travis.yml setup.cfg appveyor.yml