pipenvで任意のディレクトリからアプリケーションを実行したい


pipenvでのアプリケーションのビルド・実行は、プロジェクトのルートディレクトリで

[code]

    pipenv install
    pipenv run python main.py
    
[/code]

のようにすると思うのですが、このアプリケーションを任意のディレクトリから実行する方法が見つけられずにいます。

**試したこと**  
**1. スクリプトのパスを指定**  
例えば

[code]

    pipenv run python /path/to/main.py
    
[/code]

のようにすると、カレントディレクトリに対して仮想環境の構築が始まってしまいます。

**2. pipenv shell**  
`pipenv shell`で仮想環境を起動すれば`python
/path/to/main.py`で実行できますが、毎回仮想環境を起動しなければならず、複数のアプリケーションを使うのにいちいち仮想環境を切り替えなければならない(?)のが手間です。

理想的には、プロジェクトのルートで仮想環境を構築し、その仮想環境のもとでのアプリケーション実行を任意のディレクトリから行いたいのですが、そのようなことは可能でしょうか？




`PIPENV_PIPFILE`環境変数を使って、所望の結果を得られそうです。

例えば、Pipfileのあるディレクトリで`pip
install`して、必要パッケージのインストールと仮想環境の構築が完了しているとして、他のディレクトリにおいて

[code]

    export PIPENV_PIPFILE=/path/to/Pipfile
    pipenv run python /path/to/main.py $*
    
[/code]

とすると、構築済みの仮想環境を使ってアプリケーションが実行されます。

こうなるのは仮想環境が（カレントディレクトリに対してではなく）Pipfileのパスに対して作られるためのようです。残念ながら、この振る舞いについて明記されたドキュメントは見つけられませんでした。以下に[ソースコード](https://github.com/pypa/pipenv/blob/02fc52b8da7dc76d429504864704d59ea29426fb/pipenv/project.py)の該当箇所を抜粋します。

[code]

    @property
    def name(self):
        if self._name is None:
            self._name = self.pipfile_location.split(os.sep)[-2]
        return self._name
    
[/code]

[code]

    @property
    def virtualenv_name(self):
        sanitized, encoded_hash = self._get_virtualenv_hash(self.name)
        suffix = "-{0}".format(PIPENV_PYTHON) if PIPENV_PYTHON else ""
        # If the pipfile was located at '/home/user/MY_PROJECT/Pipfile',
        # the name of its virtualenv will be 'my-project-wyUfYPqE'
        return sanitized + "-" + encoded_hash + suffix
    
[/code]




本家に関連しそうな質問がありました。  
ただ、解決とはなってないようです。

[How to run a cron job with
pipenv?](https://stackoverflow.com/questions/48990067/how-to-run-a-cron-job-
with-pipenv?answertab=active#tab-top)

そこでは、ラッパーシェルスクリプトを用意する方式が提案されていました。  
ラッパーシェルスクリプトの中で、  
ディレクトリの移動と、`pipenv run`を実行するというものです。

この方式なら実現できると思います。

