use python3-venv
This commit is contained in:
parent
90537f2f0e
commit
8e4ba42fc1
13 changed files with 119 additions and 118 deletions
|
|
@ -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('/', '_')
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue