设置 PYTHONPATH,当 virtualenv 被激活时

问题描述

此时,我使用 pyenv + venv 来管理 Python 版本和特定库。我的项目布局如下所示:

  1. 目录1
    • subdir11
    • subdir12
    • subdir13
  2. 目录2
    • subdir21
    • subdir22
    • subdir23

我的目标是,一旦 venv 被激活,dir1dir2 才能进入 sys.path。基本上,我解决了这个任务,但我真的不喜欢解决方案。我在 PYTHONPATH 文件下的 venv添加自定义 bin/activate,一切正常。从部署的角度来看,这不是那么灵活。 venv 是否为此提供了一些 hooks?例如:设置客户 environment variables 一旦 venv 被激活或运行一些功能或类似的东西。我不喜欢在每台机器上修改 bin/activate 文件的想法。
P.S 我知道包装材料和 setuptools,但对于这个项目我不能使用它。

有什么想法吗?

谢谢!

解决方法

另一种可能性(这通常是我使用的并且避免进入你的 venv 源代码):

创建一个 activate.sh 脚本,在其中导出模块的路径并激活 venv 即:

source venv/bin/activate
export PYTHONPATH=$PYTHONPATH:$(pwd)

那么您可以只执行 source activate.sh 而不是 source venv/bin/activate 并且您将同时执行这两个操作。