为开发环境管理PYTHONPATH

时间:2014-07-27 14:50:36

标签: python virtualenv pythonpath

我和我的团队一起开发了几个不同的Python包。假设我们有~/src/pkg1~/src/pkg2~/src/pkg3。如果我们不需要管理点文件,我们如何将这些添加到PYTHONPATH

我们可以添加一个~/src/site/sitecustomize.pyPYTHONPATH添加一次sitecustomize.py,但保证"保证"那不是一个全球性的{{1}}。

virtualenv似乎是错误的解决方案,因为我们不希望在每次更改后都必须构建/安装软件包。

4 个答案:

答案 0 :(得分:2)

你有很多选择...

1)为什么不使用dotfiles?

您可以使用集中式存储库集中管理dotfiles,也可以选择使用版本控制。我使用名为dotfiles的Dropbox文件夹,但许多人使用github或其他类似的服务来管理dotfiles。

如果您这样做,您将保证开发团队中的每个人都共享一些dotfiles。因此,您可以定义一个dotfile .python_proys来导出相应的PATHPYTHONPATH,按照惯例,每个开发人员都应该在其环境中source

假设 pkg1 只是一个脚本, pkg2 是一个脚本,也是一个模块, pk3 只是一个模块。然后,python_proys示例:

export PATH=$PATH:~/src/pkg1:~/src/pkg2
export PYTHONPATH=$PYTHONPATH:~/src/pkg2:~/src/pkg3

然后,每个开发人员必须通过对话来source这个点文件。每个人都会按自己喜欢的方式行事。在使用包之前,可以手动source点文件。另一个人可以source.bashrc或其他任何点文件.zshenv适用于他。

这个想法是有一个集中的协调点,只有一个dotfile来维护:.python_proys dotfile。

2)使用符号链接

您可以在家中定义目录,例如~/dist(对于模块)和~/bin(对于脚本),并在那里设置符号链接到~/src/中的特定包含,并制作每位开发者都有PATHPYTHONPATH设置:

export PATH=$PATH:~/bin
export PYTHONPATH=$PYTHONPATH:~/dist

所以,在为什么不是dotfiles?中使用相同的例子,其中 pkg1 只是一个脚本, pkg2 是一个脚本,也是一个模块和 pkg3 只是一个模块,那么您可以符号链接:

cd ~/bin
ln -s ../src/pkg1
ln -s ../src/pkg2
cd ~/dist
ln -s ../src/pkg2
ln -s ../src/pkg3

这些命令可以通过脚本自动完成。您可以编写引导脚本,或者只是复制并粘贴命令并将其保存在shell脚本中。无论如何,保持它并集中它,就像我之前解释它一样。

这样.dotfiles不会改变,只有定义符号链接的脚本。

答案 1 :(得分:0)

首先,你不要向PYTHONPATH添加python模块,只需添加路径组件。

如果您希望所有团队都在使用某个python软件包,则可以在虚拟环境中使用-e option将软件包安装为可编辑的。

通过这种方式,您可以继续开发,而不必弄乱PYTHONPATH。请记住,工作目录始终包含在PYTHONPATH中,因此除非您有外部要求;您不需要虚拟环境,只需要工作目录中的源。

您的工作流程如下:

  1. 创建虚拟环境
  2. 创建.pth file,修改您的PYTHONPATH
  3. 照常工作。
  4. 这是我的首选。如果项目中有标准布局,则可以分发自定义bootstrap script来创建环境,然后自动调整PYTHONPATH。在整个团队中共享此引导脚本,或将其作为源存储库的一部分添加。

答案 2 :(得分:0)

我建议按照site模块的文档中的说明,创建名称 .pth路径配置文件。这些文件可以包含多个路径,这些路径将添加到sys.path并且可以轻松编辑,因为它们只是文本文件。

答案 3 :(得分:-1)

我假设您的其他模块处于可预测的路径(相对于$ 0)

我们可以计算$ 0的绝对路径

os.path.realpath(sys.argv[0])

然后到达您的模块路径并附加

sys.path.append(something)