为开发环境管理PYTHONPATH
我正在和我的团队开发几个不同的Python包。假设我们有为开发环境管理PYTHONPATH,python,virtualenv,pythonpath,Python,Virtualenv,Pythonpath,我正在和我的团队开发几个不同的Python包。假设我们有~/src/pkg1,~/src/pkg2,和~/src/pkg3。我们如何将这些文件添加到PYTHONPATH中,而不必每个人都管理点文件 我们可以添加,比如说,~/src/site/sitecustomize.py,它只添加一次到PYTHONPATH,但它“保证”不会有全局sitecustomize.py virtualenv似乎是错误的解决方案,因为我们不希望在每次更改后都必须构建/安装软件包。我假设您的其他模块处于可预测的路径(相对
~/src/pkg1
,~/src/pkg2
,和~/src/pkg3
。我们如何将这些文件添加到PYTHONPATH
中,而不必每个人都管理点文件
我们可以添加,比如说,~/src/site/sitecustomize.py
,它只添加一次到PYTHONPATH
,但它“保证”不会有全局sitecustomize.py
virtualenv似乎是错误的解决方案,因为我们不希望在每次更改后都必须构建/安装软件包。我假设您的其他模块处于可预测的路径(相对于$0) 我们可以计算$0的绝对路径 os.path.realpath(sys.argv[0]) os.path.realpath(sys.argv[0]) 然后到达模块路径并附加它 sys.path.append(something) sys.path.append(某物)
首先,您不需要将python模块添加到
PYTHONPATH
,只需添加路径组件
如果您希望所有团队都在使用某个python包,可以在虚拟环境中以可编辑的方式安装该包
通过这种方式,您可以继续开发,而不必弄乱PYTHONPATH
。请记住,工作目录始终包含在PYTHONPATH
中,因此除非您有外部需求;您不需要虚拟环境,只需要工作目录中的源代码
您的工作流程如下所示:
PYTHONPATH
这将是我的首选。如果您的项目中有标准布局,您可以分发一个自定义的布局来创建环境,然后自动调整
PYTHONPATH
。在整个团队中共享此引导脚本,或将其添加为源存储库的一部分。我建议按照模块文档中的说明创建name.pth路径配置文件。这些文件可以包含多个路径,这些路径将被添加到sys.path
,并且易于编辑,因为它们只是文本文件。您有很多选择
1) 为什么不使用dotfiles呢?
您可以使用集中存储库和版本控制来集中管理点文件。我使用名为dotfiles
的Dropbox文件夹,但许多人使用github
或类似的其他服务来管理dotfiles
如果您这样做,您将保证您的开发团队中的每个人都共享一些点文件。因此,您可以定义一个点文件,比如.python\u proys
,它导出适当的路径
和PYTHONPATH
,按照惯例,每个开发人员都应该在他们的环境中源
假设pkg1只是一个脚本,pkg2是一个脚本,也是一个模块,pk3只是一个模块。然后,python_proys示例:
export PATH=$PATH:~/src/pkg1:~/src/pkg2
export PYTHONPATH=$PYTHONPATH:~/src/pkg2:~/src/pkg3
然后,每个开发人员都必须通过转换在某个地方源文件。每个人都会按自己喜欢的方式做。可以在使用包之前手动source
dotfile。另一个人可以在他的.bashrc
或.zshenv
或任何适用于他的点文件中源代码
其思想是有一个集中的协调点,只需维护一个点文件:python_proys点文件
2) 使用符号链接
您可以在家中定义一个目录,如~/dist
(用于模块)和~/bin
(用于脚本),并在那里设置指向~/src/
中特定包的符号链接,并使每个开发人员都具有此路径和PYTHONPATH
设置:
export PATH=$PATH:~/bin
export PYTHONPATH=$PYTHONPATH:~/dist
因此,在Why not 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脚本中。无论如何,要像我之前解释的那样维护和集中它
通过这种方式,.dot文件不会更改,只会更改定义符号链接的脚本。我认为您已将问题标记为virtualenv,尝试过使用它吗?使用virtualenv
您不会在每次更改后生成/安装包,只需在运行代码之前激活环境(.bin/activate
)(假设您正在为自己的包使用符号链接的开发鸡蛋)。如果有人添加新包,我希望避免使用“virtualenv-e”在~/src/pkg1、~/src/pkg2、~/src/pkg3等中为团队的每个成员。每个包都有模块~/src/pkg1/mod1/_init_.py、~/src/pkg2/mod2/_init____.py等。目录~/src/pkg1等。因此需要在路径中才能看到mod1、mod2等。使用virtualenv-e时,每个同事都必须为每个项目运行它。我试图避免这些是在人们的主目录中的开发包,而不是在站点目录中。放在.pth文件中的路径可以在任何地方引用目录。