org-babelを使用してvirtualenvを有効にする

私は、いくつかのPythonを実行する前にorg-babelソースブロックでvirtualenvを有効にしたいと考えました。

私は、コードブロックを取り除く前に、 pyenv pyvenv-workonのようなことをしたかったのです。私はvirtualenvを手動で有効にする必要はありませんでした。

何かのようなもの、

#+NAME: elasticsearch_dsl_test
#+BEGIN_SRC: python :prologue "(pyvenv-workon 'elasticsearch)"
from elasticsearch import Elasticsearch
from elasticsearch_dsl import Search, Q

client = Elasticsearch()

search = Search(using=client, index="localdev-news-newsentry")
response = search.execute()

print ["No response", "Was successfull"][int(response.success())]
print "Response took {0}ms.".format(response.took)
#+END_SRC

私はそれを働かせることができませんでした。

4
:prologue を使用すると、そのままテキストがsrcブロックの前に追加されます。あなたのプロローグを引用符で囲まずに、それが前に付加されるものを返さないようにしてください。
追加された 著者 Superbest,
あなたのプロローグから引用符を削除すると、sexpの副作用が評価され、srcブロックに pyvenv-workon が返すものはすべて追加されます。 :prologue のデフォルト値は ""なので、何も追加されないようにするには:prologue(progn(pyvenv-workon 'elasticsearch) "")を使用します。
追加された 著者 Superbest,
@mutbuergerは、私が示唆していることをすることさえ可能ですか?私はより多くの読書をして、プロローグはちょうど最初に追加されるので、Pythonは私のelispを解釈できないでしょう。
追加された 著者 Amy C Smith,

1 答え

org-babel :session pyvenv を同時に使用して、複数のvirtualenvで作業しています>。

Note that scratchenv-SNmPgRMB is the name of one of my personal environments created using pipenv replace it with your virtualenv environment name.

#+BEGIN_SRC elisp :session venv-scratch
(pyvenv-workon "scratchenv-SNmPgRMB")
#+END_SRC

#+RESULTS:

#+BEGIN_SRC sh :session venv-scratch
echo $VIRTUAL_ENV
which python
#+END_SRC

#+RESULTS:
: /home/costrouc/.virtualenvs/scratchenv-SNmPgRMB
: /home/costrouc/.virtualenvs/scratchenv-SNmPgRMB/bin/python

#+BEGIN_SRC python :results output :session venv-scratch
import sys
print('\n'.join(sys.path))
#+END_SRC

#+RESULTS:
: 
: /home/costrouc/.virtualenvs/scratchenv-SNmPgRMB/lib/python36.zip
: /home/costrouc/.virtualenvs/scratchenv-SNmPgRMB/lib/python3.6
: /home/costrouc/.virtualenvs/scratchenv-SNmPgRMB/lib/python3.6/lib-dynload
: /usr/lib/python3.6
: /home/costrouc/.virtualenvs/scratchenv-SNmPgRMB/lib/python3.6/site-packages

Read paragraph if you need multiple concurrent virtualenvs. One important thing to note about this approach is that you must run the shell and python interpreter once before adding another session with a different virtual environment. The reasoning for this is that when org-babel starts a session for sh and python it launches an interpreter. This means that at a minimum you need to run these three blocks before starting a new virtualenv session.

3
追加された