【问题标题】:Should I add my Python project to the site-packages directory, or append my project to PYTHONPATH?我应该将我的 Python 项目添加到 site-packages 目录,还是将我的项目附加到 PYTHONPATH?
【发布时间】:2014-07-01 19:44:06
【问题描述】:
我有一个 Python 项目,它包含三个组件:主要的可执行脚本、这些脚本所依赖的模块以及这些脚本操作的数据(sqlite3 数据库、平面文件等)。顶层有一个__init__.py 文件,以便其他程序在需要时也可以从模块中借用。
问题是,将我的项目移动到默认的站点包目录,或者修改 PYTHONPATH 以包含我的项目上方的一个目录(以便可以从中导入项目)是更“Pythonic”还是“正确”? ?一方面,我所描述的严格来说并不是一个“包”,而是一个“项目”,其中的数据可以被视为一个包。所以我倾向于修改 PYTHONPATH(毕竟 PYTHONPATH 存在一定是有原因的,对吧?)
【问题讨论】:
标签:
python
environment-variables
pythonpath
【解决方案1】:
绝对不要将您的项目添加到站点包中,这会破坏您的系统 Python 安装,并且会在其他应用程序出现或您需要安装某些东西时回火。
最后有两个流行的选项可以以隔离方式安装 python 应用程序
使用虚拟环境
查看 virtualenv 项目。它允许
- 创建新的隔离 python 环境 - 该环境的 python 与系统一不同,它有自己的 PYTHONPATH 设置,这允许将所有已安装的包保持为私有。
- 从命令行激活和停用给定的 virtualenv 以供命令行使用。在
activate 之后,你可以运行pip install 等,它只会影响给定的virtualenv install。
- 从 virtualenv Python 副本开始调用任何 Python 脚本 - 这将使用相关的 virtualenv(注意,无需调用任何
activate)
使用zc.buildout
此软件包提供命令buildout。有了这个,您可以使用特殊的配置文件,这允许使用所有包和脚本创建本地 python 环境。
结论
-
virtualenv 今天似乎更受欢迎,我发现它更容易学习和使用
-
zc.buildout 可能也适合你,但请准备好更长的学习时间
- 安装到系统 Python 目录应始终保留用于非常特殊的情况(pip、easy_install),最好避免。
- 安装到私有目录并操作 PYTHONPATH 也是一种选择,但您会重复
virtualenv 已经提供的功能