Có một cách để làm điều đó, vì nó hóa ra. Kể từ phiên bản 1.6 trở về trước, virtualenv đi kèm với một tập lệnh activate_this.py
, có thể được sử dụng để thiết lập một trình thông dịch hiện có để truy cập vào virtualenv cụ thể đó.
exec(open('/Some/VirtualEnv/Directory/myvirtualenv/bin/activate_this.py').read(),
dict(__file__='/Some/VirtualEnv/Directory/myvirtualenv/bin/activate_this.py'))
Và như một chức năng plpython được thực hiện đầy đủ:
CREATE OR REPLACE FUNCTION workon(venv text)
RETURNS void AS
$BODY$
import os
import sys
if sys.platform in ('win32', 'win64', 'cygwin'):
activate_this = os.path.join(venv, 'Scripts', 'activate_this.py')
else:
if not os.environ.has_key('PATH'):
import subprocess
p=subprocess.Popen('echo -n $PATH', stdout=subprocess.PIPE, shell=True)
(mypath,err) = p.communicate()
os.environ['PATH'] = mypath
activate_this = os.path.join(venv, 'bin', 'activate_this.py')
exec(open(activate_this).read(), dict(__file__=activate_this))
$BODY$
LANGUAGE plpythonu VOLATILE
(Cần bổ sung thêm PATH vì PATH theo mặc định không khả dụng trong plpython os.environ -activate_this.py có sửa lỗi đã đăng ký sẽ cuộn với bản phát hành điểm tiếp theo (phải là 1.11.7 hoặc 1.12)
(được lấy chủ yếu từ https://gist.github.com/dmckeone/69334e2d8b27f586414a )