我有一个脚本,我必须为其设置一个特定的 virtualenv。
#!/usr/bin/env python / python3 / python3.6如果脚本运行时 virtualenv 未打开,则运行脚本不会切断它,所以我做了这样的事情:
#!/home/bla/bla2/bla3/venv/bin/python
import virtualenv stuff...
Run Code Online (Sandbox Code Playgroud)
我假设
鉴于这两个假设,这是一个好主意吗?如果不是,什么会更好?我不愿意有一个包装 bash 脚本来打开 venv 然后调用我的脚本
您应该创建一个构建 venv 的脚本,然后在其中运行该脚本。对 venv python 的路径进行硬编码是一个糟糕的主意,因为如果您更改您的用户名、PC 等或将代码提供给其他人(或将其开源),它将失败。
这完全没问题,这就是入口点的控制台脚本的生成方式。当然,存在文件和目录不能重命名等限制,但这很明显。
\n\n例如,以下是pip新创建的虚拟环境中的脚本内容:
/tmp/tmp.cqz22j4Vg7$ cat .venv/bin/pip\nRun Code Online (Sandbox Code Playgroud)\n\n#!/tmp/tmp.cqz22j4Vg7/.venv/bin/python3\n\n# -*- coding: utf-8 -*-\nimport re\nimport sys\n\nfrom pip._internal.cli.main import main\n\nif __name__ == \'__main__\':\n sys.argv[0] = re.sub(r\'(-script\\.pyw?|\\.exe)?$\', \'\', sys.argv[0])\n sys.exit(main())\nRun Code Online (Sandbox Code Playgroud)\n\n我相信脚本中的 shebang 是绝对路径,因此无需激活虚拟环境即可调用它们。
\n\n常见的做法是保留这样的虚拟环境,并添加指向 .txt 中列出的目录中的特定脚本的符号链接PATH。例如,可以在虚拟环境中安装tox并使其可以从任何地方使用:
ln -s \'/path/to/venv/bin/tox\' "${HOME}/.local/bin/tox"\nRun Code Online (Sandbox Code Playgroud)\n\n来自 Python 的venv文档:
\n\n\n\n\n其他情况不需要激活虚拟环境;安装到虚拟环境中的脚本有一个 \xe2\x80\x9cshebang\xe2\x80\x9d 行,它指向虚拟环境\xe2\x80\x99s Python 解释器。
\n
-- https://docs.python.org/3/library/venv.html?highlight=shebang
\n