首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >完全隔离的Python环境

完全隔离的Python环境
EN

Stack Overflow用户
提问于 2017-01-21 21:44:52
回答 2查看 640关注 0票数 2

现在,我正在对部署在生产环境中的应用程序使用virtualenv

我像这样运行我的应用程序

代码语言:javascript
复制
cd $PROJECT_DIR
venv/bin/gunicorn -c gunicorn.conf.py my_app.wsgi:application

代码语言:javascript
复制
cd $PROJECT_DIR
venv/bin/celery worker --app=my_app.celery_tasks

最近我们迁移到了Python3,最新的Python3.6不支持Ubuntu 14.04,所以我自己编译了它。编译它还可以让我从使用./configure --enable-optimizations的优化中受益。

因此,我正在考虑在我的部署中总是自己编译Python。但同时保留virtualenv文件结构,以便我在虚拟环境中用于运行应用程序的命令将保持不变。

我看到人们推荐使用pyenv,但我不喜欢它的原因是它将Python本身存储在~/.penv中,显然,我需要摆弄PATH环境变量才能使我的命令在Cron和shell脚本中工作,这是我不喜欢的。如果可能的话,我想把我所有的环境都放在一个目录中。

所以我的问题是,我能否以某种方式将Python编译到我的项目目录中的venv目录中,以便目录结构与使用virtualenv时相同?像这样:

代码语言:javascript
复制
$PROJECT_DIR/
    my_app/
    venv/
        bin/
            python
            python3.6
            celery
            gunicorn
            ...
        lib/
            python3.6/
                site-packages/
                    celery/
                    gunicorn/
                    ...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-22 01:10:41

您可以在创建virutalenv时指定Python二进制:

代码语言:javascript
复制
virtualenv env -p /path/to/compiled/python3.6
票数 2
EN

Stack Overflow用户

发布于 2017-01-22 23:00:38

下面是我想出来的脚本:

代码语言:javascript
复制
HERE=$( (cd -P $(dirname $0) && pwd) )
REQUIRED_PY_VERSION=$(cat ".python_version")
USR_DIR="$HERE/usr"
VENV_DIR="$HERE/venv"

echo "The system Python has another version $py_version"
echo "Downloading, compiling and installing the required version"
py_file_name="Python-$REQUIRED_PY_VERSION.tgz"
wget "https://www.python.org/ftp/python/$REQUIRED_PY_VERSION/$py_file_name" -O "$py_file_name"

py_source_dir="Python-$REQUIRED_PY_VERSION"
echo "Unpacking Python source code to $py_source_dir..."
mkdir -p "$py_source_dir"
tar xzvf "$py_file_name" --directory="$py_source_dir" --strip-components=1
cd "$py_source_dir"

# make clean
echo "Configuring compilation..."
./configure --enable-optimizations --prefix="$USR_DIR"
echo "Compiling..."
make
echo "Installing..."
make install

cd ..
echo "Removing downloaded files"
rm "$py_file_name"
rm -rf "$py_source_dir"
py_path="$USR_DIR/bin/python3"

echo "Creating virtual environment directory in $VENV_DIR"
"$py_path" -m venv "$VENV_DIR"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41780092

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档