use python3-venv

This commit is contained in:
j 2017-11-02 21:08:17 +00:00
commit 8e4ba42fc1
13 changed files with 119 additions and 118 deletions

View file

@ -9,6 +9,7 @@ import ox
from ox import sort_string
from six import PY2
def safe_filename(filename):
filename = filename.replace(': ', '_ ')
filename = filename.replace('/', '_')

View file

@ -3,6 +3,28 @@ import os
import signal
import sys
def activate_venv(base):
if os.path.exists(base):
old_os_path = os.environ.get('PATH', '')
bin_path = os.path.join(base, 'bin')
if bin_path not in old_os_path:
os.environ['PATH'] = os.path.join(base, 'bin') + os.pathsep + old_os_path
site_packages = os.path.join(base, 'lib', 'python%s' % sys.version[:3], 'site-packages')
prev_sys_path = list(sys.path)
import site
site.addsitedir(site_packages)
sys.real_prefix = sys.prefix
sys.prefix = base
# Move the added items to the front of the path:
new_sys_path = []
for item in list(sys.path):
if item not in prev_sys_path:
new_sys_path.append(item)
sys.path.remove(item)
sys.path[:0] = new_sys_path
class DelayedSignalHandler(object):
def __init__(self, managed_signals):
self.managed_signals = managed_signals
@ -27,26 +49,22 @@ class DelayedSignalHandler(object):
'''
root_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
os.chdir(root_dir)
# use python3 from virtualenv
python3 = os.path.normpath(os.path.join(root_dir, '..', 'bin', 'python3'))
if os.path.exists(python3) and sys.version_info[0] == 2:
import subprocess
cmd = [python3] + sys.argv
with DelayedSignalHandler((signal.SIGINT, signal.SIGTERM, signal.SIGHUP)):
exit_value = subprocess.call(cmd)
sys.exit(exit_value)
# using virtualenv's activate_this.py to reorder sys.path
activate_this = os.path.normpath(os.path.join(root_dir, '..', 'bin', 'activate_this.py'))
with open(activate_this) as f:
code = compile(f.read(), activate_this, 'exec')
exec(code, dict(__file__=activate_this))
if __name__ == "__main__":
root_dir = os.path.normpath(os.path.abspath(os.path.dirname(__file__)))
# use python3 from venv
venv_dir = os.path.normpath(os.path.join(root_dir, '..'))
python3 = os.path.join(venv_dir, 'bin', 'python3')
if os.path.exists(python3) and sys.version_info[0] == 2:
import subprocess
cmd = [python3] + sys.argv
with DelayedSignalHandler((signal.SIGINT, signal.SIGTERM, signal.SIGHUP)):
exit_value = subprocess.call(cmd)
sys.exit(exit_value)
os.chdir(root_dir)
activate_venv(venv_dir)
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings")
from django.core.management import execute_from_command_line
import settings

View file

@ -11,6 +11,9 @@ import djcelery
djcelery.setup_loader()
BASE_DIR = PROJECT_ROOT = normpath(dirname(__file__))
BIN_DIR = normpath(join(PROJECT_ROOT, '..', 'bin'))
if BIN_DIR not in os.environ['PATH']:
os.environ['PATH'] = BIN_DIR + os.pathsep + os.environ['PATH']
DEBUG = False
JSON_DEBUG = False