diff --git a/.test-conda-env-py3.yml b/.test-conda-env-py3.yml
new file mode 100644
index 0000000000000000000000000000000000000000..907bcb5315603d400b96fa5466a4fef2801954a4
--- /dev/null
+++ b/.test-conda-env-py3.yml
@@ -0,0 +1,15 @@
+name: test-conda-env
+channels:
+- conda-forge
+- nodefaults
+
+dependencies:
+- python=3
+- git
+- libhwloc=2
+- numpy
+- pocl
+- mako
+- pyopencl
+- islpy
+- pip
diff --git a/requirements.txt b/requirements.txt
new file mode 100644
index 0000000000000000000000000000000000000000..3449d31527389bf8caada5fb72625143df5b76a3
--- /dev/null
+++ b/requirements.txt
@@ -0,0 +1,22 @@
+numpy
+recursivenodes
+git+https://github.com/inducer/pytools.git#egg=pytools
+git+https://github.com/inducer/gmsh_interop.git#egg=gmsh_interop
+git+https://github.com/inducer/pyvisfile.git#egg=pyvisfile
+git+https://github.com/inducer/modepy.git#egg=modepy
+git+https://github.com/inducer/pyopencl.git#egg=pyopencl
+git+https://github.com/inducer/islpy.git#egg=islpy
+
+# required by pytential, which is in turn needed for some tests
+git+https://github.com/inducer/pymbolic.git#egg=pymbolic
+
+# also depends on pymbolic, so should come after it
+git+https://github.com/inducer/loopy.git#egg=loopy
+
+# more pytential dependencies
+git+https://github.com/inducer/boxtree.git#egg=boxtree
+git+https://github.com/inducer/sumpy.git#egg=sumpy
+git+https://github.com/inducer/pytential.git#egg=pytential
+
+# requires pymetis for tests for partition_mesh
+git+https://github.com/inducer/pymetis.git#egg=pymetis