class Pipenv < Formula include Language::Python::Virtualenv desc "Python dependency management tool" homepage "https://docs.pipenv.org/" url "https://files.pythonhosted.org/packages/7e/01/3faf5d7e80c8c0612667b12104ae205a5e33d502f84b6e8bfdc07a2eb9fa/pipenv-2018.5.18.tar.gz" sha256 "04b9a8b02a3ff12a5502b335850cfdb192adcfd1d6bbdb7a7c47cae9ab9ddece" bottle do cellar :any_skip_relocation sha256 "f78f9b9827e72092592b1c7f80dd314b321039bd96fb48cfb43d75bcfc2e7712" => :high_sierra sha256 "c1aa63ef7291c326b6d630fbe4dc742e1a7905f9631c6a0552517b655d009fed" => :sierra sha256 "af9b070e2e562c8ee1c130e0453f37a4e9efe4f3ebc5d39cebbdd6ba990dece8" => :el_capitan end depends_on "python" resource "certifi" do url "https://files.pythonhosted.org/packages/4d/9c/46e950a6f4d6b4be571ddcae21e7bc846fcbb88f1de3eff0f6dd0a6be55d/certifi-2018.4.16.tar.gz" sha256 "13e698f54293db9f89122b0581843a782ad0934a4fe0172d2a980ba77fc61bb7" end resource "virtualenv" do url "https://files.pythonhosted.org/packages/b1/72/2d70c5a1de409ceb3a27ff2ec007ecdd5cc52239e7c74990e32af57affe9/virtualenv-15.2.0.tar.gz" sha256 "1d7e241b431e7afce47e77f8843a276f652699d1fa4f93b9d8ce0076fd7b0b54" end resource "virtualenv-clone" do url "https://files.pythonhosted.org/packages/14/2f/84b6a8e380439cdfdb71e0ced2a805a66e343ac540d3304bde6bc28fbb46/virtualenv-clone-0.3.0.tar.gz" sha256 "b5cfe535d14dc68dfc1d1bb4ac1209ea28235b91156e2bba8e250d291c3fb4f8" end def install # Using the virtualenv DSL here because the alternative of using # write_env_script to set a PYTHONPATH breaks things. # https://github.com/Homebrew/homebrew-core/pull/19060#issuecomment-338397417 venv = virtualenv_create(libexec, "python3") venv.pip_install resources venv.pip_install buildpath # `pipenv` needs to be able to find `virtualenv` and `pewtwo` on PATH. So we # install symlinks for those scripts in `#{libexec}/tools` and create a # wrapper script for `pipenv` which adds `#{libexec}/tools` to PATH. (libexec/"tools").install_symlink libexec/"bin/pewtwo", libexec/"bin/pip", libexec/"bin/virtualenv" env = { :PATH => "#{libexec}/tools:$PATH", } (bin/"pipenv").write_env_script(libexec/"bin/pipenv", env) output = Utils.popen_read("#{libexec}/bin/pipenv --completion") (bash_completion/"pipenv").write output end # Avoid relative paths def post_install lib_python_path = Pathname.glob(libexec/"lib/python*").first lib_python_path.each_child do |f| next unless f.symlink? realpath = f.realpath rm f ln_s realpath, f end inreplace lib_python_path/"orig-prefix.txt", Formula["python"].opt_prefix, Formula["python"].prefix.realpath end test do ENV["LC_ALL"] = "en_US.UTF-8" assert_match "Commands", shell_output("#{bin}/pipenv") system "#{bin}/pipenv", "install", "requests" system "#{bin}/pipenv", "install", "boto3" assert_predicate testpath/"Pipfile", :exist? assert_predicate testpath/"Pipfile.lock", :exist? assert_match "requests", (testpath/"Pipfile").read assert_match "boto3", (testpath/"Pipfile").read end end