diff --git a/.travis.yml b/.travis.yml
index 335da81..757e3cf 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,7 +4,6 @@ os:
   - linux
   # - osx
 julia:
-  - 0.6
   - 0.7
   - 1.0
   # - nightly
@@ -29,7 +28,8 @@ git:
 #    - gfortran
 
 before_script:
-  - julia --color=yes ci/before_script.jl
+  - julia --color=yes -e "using Pkg; Pkg.build()"
+  - cat deps/build.log
 #  - if [ $TRAVIS_OS_NAME = osx ]; then brew install gcc; fi
 
 script:
diff --git a/Manifest.toml b/Manifest.toml
new file mode 100644
index 0000000..00429dc
--- /dev/null
+++ b/Manifest.toml
@@ -0,0 +1,124 @@
+[[Base64]]
+uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f"
+
+[[Compat]]
+deps = ["Base64", "Dates", "DelimitedFiles", "Distributed", "InteractiveUtils", "LibGit2", "Libdl", "LinearAlgebra", "Markdown", "Mmap", "Pkg", "Printf", "REPL", "Random", "Serialization", "SharedArrays", "Sockets", "SparseArrays", "Statistics", "Test", "UUIDs", "Unicode"]
+git-tree-sha1 = "2d9e14d19bad3f9ad5cc5e4cffabc3cfa59de825"
+uuid = "34da2185-b29b-5c13-b0c7-acf172513d20"
+version = "1.3.0"
+
+[[Conda]]
+deps = ["Compat", "JSON", "VersionParsing"]
+git-tree-sha1 = "fb86fe40cb5b35990e368709bfdc1b46dbb99dac"
+uuid = "8f4d0f93-b110-5947-807f-2305c1781a2d"
+version = "1.1.1"
+
+[[Dates]]
+deps = ["Printf"]
+uuid = "ade2ca70-3891-5945-98fb-dc099432e06a"
+
+[[DelimitedFiles]]
+deps = ["Mmap"]
+uuid = "8bb1440f-4735-579b-a4ab-409b98df4dab"
+
+[[Distributed]]
+deps = ["LinearAlgebra", "Random", "Serialization", "Sockets"]
+uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b"
+
+[[InteractiveUtils]]
+deps = ["LinearAlgebra", "Markdown"]
+uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
+
+[[JSON]]
+deps = ["Dates", "Distributed", "Mmap", "Sockets", "Test", "Unicode"]
+git-tree-sha1 = "fec8e4d433072731466d37ed0061b3ba7f70eeb9"
+uuid = "682c06a0-de6a-54ab-a142-c8b1cf79cde6"
+version = "0.19.0"
+
+[[LibGit2]]
+uuid = "76f85450-5226-5b5a-8eaa-529ad045b433"
+
+[[Libdl]]
+uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb"
+
+[[LinearAlgebra]]
+deps = ["Libdl"]
+uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
+
+[[Logging]]
+uuid = "56ddb016-857b-54e1-b83d-db4d58db5568"
+
+[[MacroTools]]
+deps = ["Compat"]
+git-tree-sha1 = "c443e1c8d58a4e9f61b708ad0a88286c7042145b"
+uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
+version = "0.4.4"
+
+[[Markdown]]
+deps = ["Base64"]
+uuid = "d6f4376e-aef5-505a-96c1-9c027394607a"
+
+[[Mmap]]
+uuid = "a63ad114-7e13-5084-954f-fe012c677804"
+
+[[Pkg]]
+deps = ["Dates", "LibGit2", "Markdown", "Printf", "REPL", "Random", "SHA", "UUIDs"]
+uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f"
+
+[[Printf]]
+deps = ["Unicode"]
+uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7"
+
+[[PyCall]]
+deps = ["Compat", "Conda", "MacroTools", "Statistics", "VersionParsing"]
+git-tree-sha1 = "e307c5e1d85fda84200117b90c874df91b57066d"
+repo-rev = "899518b8b976ebc0f5cef1f9d0e53f4fb8768364"
+repo-url = "https://github.com/JuliaPy/PyCall.jl.git"
+uuid = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0"
+version = "1.18.5+"
+
+[[REPL]]
+deps = ["InteractiveUtils", "Markdown", "Sockets"]
+uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
+
+[[Random]]
+deps = ["Serialization"]
+uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
+
+[[SHA]]
+uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce"
+
+[[Serialization]]
+uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b"
+
+[[SharedArrays]]
+deps = ["Distributed", "Mmap", "Random", "Serialization"]
+uuid = "1a1011a3-84de-559e-8e89-a11a2f7dc383"
+
+[[Sockets]]
+uuid = "6462fe0b-24de-5631-8697-dd941f90decc"
+
+[[SparseArrays]]
+deps = ["LinearAlgebra", "Random"]
+uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf"
+
+[[Statistics]]
+deps = ["LinearAlgebra", "SparseArrays"]
+uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2"
+
+[[Test]]
+deps = ["Distributed", "InteractiveUtils", "Logging", "Random"]
+uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
+
+[[UUIDs]]
+deps = ["Random"]
+uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4"
+
+[[Unicode]]
+uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5"
+
+[[VersionParsing]]
+deps = ["Compat"]
+git-tree-sha1 = "c9d5aa108588b978bd859554660c8a5c4f2f7669"
+uuid = "81def892-9a0e-5fdd-b105-ffc91e053289"
+version = "1.1.3"
diff --git a/Project.toml b/Project.toml
new file mode 100644
index 0000000..6ecce33
--- /dev/null
+++ b/Project.toml
@@ -0,0 +1,10 @@
+name = "IPython"
+uuid = "18364772-b071-5c00-bfd7-ceeaffab630a"
+
+[deps]
+Compat = "34da2185-b29b-5c13-b0c7-acf172513d20"
+Conda = "8f4d0f93-b110-5947-807f-2305c1781a2d"
+InteractiveUtils = "b77e0a4c-d291-57a0-90e8-8db25a27a240"
+PyCall = "438e738f-606a-5dbb-bf0a-cddfbfd45ab0"
+REPL = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb"
+Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
diff --git a/deps/build.jl b/deps/build.jl
new file mode 100644
index 0000000..1d009a6
--- /dev/null
+++ b/deps/build.jl
@@ -0,0 +1,38 @@
+if VERSION >= v"0.7.0-"
+    # Adding Pkg in test/REQUIRE would be an error in 0.6.  Using
+    # Project.toml still has some gotchas.  So:
+    Pkg = Base.require(Base.PkgId(Base.UUID(0x44cfe95a1eb252eab672e2afdf69b78f), "Pkg"))
+end
+
+in_CI = lowercase(get(ENV, "CI", "false")) == "true"
+
+if in_CI
+    # Let PyCall.jl use Python interpreter from Conda.jl
+    # See: https://github.com/JuliaPy/PyCall.jl
+    ENV["PYTHON"] = ""
+    Pkg.build("PyCall")
+end
+
+using PyCall
+
+if get(ENV, "CONDA_JL_VERSION", "") == "3"
+    PyCall.conda_add(["python=3.6"])
+    PyCall.conda_add(["python=3.7"])
+end
+
+packages = ["ipython"]
+if in_CI
+    push!(packages, "pytest")
+    if get(ENV, "CONDA_JL_VERSION", "") == "2"
+        # For IPython.testing.globalipapp
+        push!(packages, "mock")
+    end
+end
+PyCall.conda_add(packages)
+
+if VERSION >= v"0.7.0-"
+    @info "PyCall/deps/build.log:"
+    print(read(
+        joinpath(dirname(dirname(pathof(PyCall))), "deps", "build.log"),
+        String))
+end
diff --git a/src/convenience.jl b/src/convenience.jl
index ce60d38..348c655 100644
--- a/src/convenience.jl
+++ b/src/convenience.jl
@@ -83,15 +83,12 @@ NOT_INSTALLABLE = (false, "", Nothing)
 
 function condajl_installation(package)
     if PyCall.conda && package in conda_packages
-        args = `install -y -c conda-forge $package`
         message = """
         Installing $package via Conda.jl
         Execute?:
-            Conda.runconda($args)
+            Conda.add($package)
         """
-        install = () -> Conda.runconda(args)
-        # `Conda.add_channel` overwrites user's ~/.condarc so let's
-        # not use it.
+        install = () -> Conda.add(package)
         return (true, message, install)
     end
     return NOT_INSTALLABLE
diff --git a/test/install_dependencies.jl b/test/install_dependencies.jl
deleted file mode 100644
index c08dc15..0000000
--- a/test/install_dependencies.jl
+++ /dev/null
@@ -1,31 +0,0 @@
-if VERSION >= v"0.7.0-"
-    # Adding Pkg in test/REQUIRE would be an error in 0.6.  Using
-    # Project.toml still has some gotchas.  So:
-    Pkg = Base.require(Base.PkgId(Base.UUID(0x44cfe95a1eb252eab672e2afdf69b78f), "Pkg"))
-end
-
-# Let PyCall.jl use Python interpreter from Conda.jl
-# See: https://github.com/JuliaPy/PyCall.jl
-ENV["PYTHON"] = ""
-Pkg.build("PyCall")
-
-using Compat: @info
-using IPython
-
-IPython.install_dependency("pytest"; force=true)
-IPython.install_dependency("ipython"; force=true)
-if get(ENV, "CONDA_JL_VERSION", "") == "2"
-    # For IPython.testing.globalipapp
-    IPython.install_dependency("mock"; force=true)
-end
-
-# Build PyCall again, since above installation could have changed
-# Python versions.
-Pkg.build("PyCall")
-
-if VERSION >= v"0.7.0-"
-    @info "PyCall/deps/build.log:"
-    print(read(
-        joinpath(dirname(dirname(pathof(IPython.PyCall))), "deps", "build.log"),
-        String))
-end
diff --git a/test/runtests.jl b/test/runtests.jl
index d635a5d..8977d1e 100644
--- a/test/runtests.jl
+++ b/test/runtests.jl
@@ -1,24 +1,5 @@
 # module TestIPython
 
-if lowercase(get(ENV, "CI", "false")) == "true"
-    let
-        if VERSION < v"0.7.0-"
-            setup_code = ""
-        else
-            setup_code = Base.load_path_setup_code()
-        end
-        path = joinpath(@__DIR__, "install_dependencies.jl")
-        code = """
-        $setup_code
-        include("$(escape_string(path))")
-        """
-        run(`$(Base.julia_cmd()) -e $code`)
-        # Run install_dependencies.jl in a separate process since it
-        # may re-build PyCall.  In that case, we need to load
-        # re-precompiled PyCall and IPython.
-    end
-end
-
 include("preamble.jl")
 
 IPython.envinfo()