有些时候我需要使用不属于默认python安装的模块,有时甚至像Anaconda或Canopy这样的软件包都不包含它们。因此,每次我将项目移动到另一台机器或只是重新安装python我需要再次下载它们。所以我的问题是。有没有办法在项目文件夹中存储必需的模块,并从中使用它们,而无需移动到默认的python安装文件夹。
答案 0 :(得分:1)
您可以使用virtual environment或docker在项目目录中安装所需的模块,以便与系统Python安装隔离。事实上,在使用docker时,您不需要在计算机上安装Python。
这是我使用Docker开发Django Web应用程序时的工作流程。如果您的项目目录位于/Projects/sampleapp
,请将当前工作目录更改为项目目录并运行以下内容。
从终端运行docker容器:
docker run \
-it --rm \
--name django_app \
-v ${PWD}:/app \
-w /app \
-e PYTHONUSERBASE=/app/.vendors \
-p 8000:8000 \
python:3.5 \
bash -c "export PATH=\$PATH:/app/.vendors/bin && bash"
# Command expalanation:
#
# docker run Run a docker container
# -it Set interactive and allocate a pseudo-TTY
# -rm Remove the container on exit
# --name django_app Set the container name
# -v ${PWD}:/app Mount current dir as /app in the container
# -w /app Set the current working directory to /app
# -e PYTHONUSERBASE=/app/.vendors pip will install packages to /app/.vendors
# -p 8000:8000 Open port 8000
# python:3.5 Use the Python:3.5 docker image
# bash -c "..." Add /app/.vendors/bin to PATH and open the shell
在容器的shell上,安装所需的包:
pip install django celery django-allauth --user
pip freeze > requirements.txt
--user
选项以及PYTHONUSERBASE
环境变量将使pip在/app/.vendors
中安装包。
创建django项目并照常开发应用程序:
django-admin startproject sampleapp
cd sampleapp
python manage.py runserver 0.0.0.0:8000
目录结构如下所示:
Projects/
sampleapp/
requirements.txt
.vendors/ # Note: don't add this dir to your VCS
sampleapp/
manage.py
...
此配置使您可以在项目目录中安装与系统隔离的软件包。请注意,您需要将requirements.txt
添加到VCS,但请记住排除.vendors/
目录。
当您需要在另一台计算机上移动和运行项目时,运行上面的docker命令并在容器的shell上重新安装所需的包:
pip install -r requirements.txt --user