我和我的团队一起开发了几个不同的Python包。假设我们有~/src/pkg1
,~/src/pkg2
和~/src/pkg3
。如果我们不需要管理点文件,我们如何将这些添加到PYTHONPATH
?
我们可以添加一个~/src/site/sitecustomize.py
,PYTHONPATH
添加一次sitecustomize.py
,但保证"保证"那不是一个全球性的{{1}}。
virtualenv似乎是错误的解决方案,因为我们不希望在每次更改后都必须构建/安装软件包。
答案 0 :(得分:2)
你有很多选择...
您可以使用集中式存储库集中管理dotfiles,也可以选择使用版本控制。我使用名为dotfiles
的Dropbox文件夹,但许多人使用github
或其他类似的服务来管理dotfiles。
如果您这样做,您将保证开发团队中的每个人都共享一些dotfiles。因此,您可以定义一个dotfile .python_proys
来导出相应的PATH
和PYTHONPATH
,按照惯例,每个开发人员都应该在其环境中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。
您可以在家中定义目录,例如~/dist
(对于模块)和~/bin
(对于脚本),并在那里设置符号链接到~/src/
中的特定包含,并制作每位开发者都有PATH
和PYTHONPATH
设置:
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
中,因此除非您有外部要求;您不需要虚拟环境,只需要工作目录中的源。
您的工作流程如下:
.pth
file,修改您的PYTHONPATH
。这是我的首选。如果项目中有标准布局,则可以分发自定义bootstrap script来创建环境,然后自动调整PYTHONPATH
。在整个团队中共享此引导脚本,或将其作为源存储库的一部分添加。
答案 2 :(得分:0)
我建议按照site
模块的文档中的说明,创建名称 .pth路径配置文件。这些文件可以包含多个路径,这些路径将添加到sys.path
并且可以轻松编辑,因为它们只是文本文件。
答案 3 :(得分:-1)
我假设您的其他模块处于可预测的路径(相对于$ 0)
我们可以计算$ 0的绝对路径
os.path.realpath(sys.argv[0])
然后到达您的模块路径并附加
sys.path.append(something)