是的!
当您想向非技术用户提供工具而不要求他们安装任何东西时,您可以将 python 放入 scm。从理论上讲,您可以设置一些其他工具并让它们都安装它,这样您就可以确保它们每次同步时都运行pip install -r requirements.txt 并获取所有依赖项,但这并不总是那么容易。如果您在使用 python 时遇到阻力(“它没有编译;每个人都必须安装 python”),那么将 python 放入 scm 是您的最佳选择!
如果您使用的是 Linux/Unix,您可能会使用内置的包管理器,所以我假设您使用的是 Windows。 (注意:有适用于 Windows 的包管理器,例如 scoop、choco 和 winget——它们值得一看。)
您有两种选择将 python 放入 scm:
在why so many python installers 上阅读有关此软件包的更多信息。
如果你想要最小的 python 并手动提供包(不使用 pip),
这应该是一个好方法。理论上,you can set yourself up to
install
packages
也。但是,如果您希望团队中的任何开发人员都能够安装软件包,
这可能不是一个好的选择。
常规的 python 安装。但我们会做一些不同的事情。
- 设置您的 scm 忽略
*.pyc 和 __pycache__
- 安装python到
C:\python3
- 我小心不要运行 python 以避免生成任何临时文件,以便更容易捕获和忽略它们。
- 将
C:\python3 复制到您的项目中:c:\proj\tools\python3
- 从
C:\python3卸载python
- 这样您的机器就像您的用户一样。确认一切正常后,您可以将项目中的 python 添加到 PATH 或重新安装 python。
- 创建一个目录来保存你的 python 模块:
c:\proj\tools\pymodules
- 在该文件夹中创建一个空的
__init__.py 文件:c:\proj\tools\pymodules\__init__.py
- 使用相对路径创建一个 work.pth 文件,以便 python 可以找到您的 python 模块:
c:\proj\tools\python3\site-packages\work.pth
../../../pymodules
- 现在提交所有内容。
- 运行
python -m http.server 8000 --directory . 或其他一些 python 代码,以便您仔细检查您的忽略是否正确。
现在您将能够使用 pip 安装新软件包并将它们提交到源代码管理。如果创建pymodules\work\__init__.py(空)和pymodules\work\example.py:
print('Hello from example.py')
你可以运行它:
c:\proj\tools\python3\python.exe -m work.example
然后导入:
import work.example
不要弄乱路径!
但是,您可能需要确保所有用户都直接运行 python.exe 并且不能假定它在他们的 PATH 中。但是,既然您知道它在他们的项目中的位置,那么这不太可能是个问题。您可以创建一键批处理文件,从它们的路径确定 python 的路径:
%~dp0\..\..\python3\python.exe -m work.example
多年来,我们在工作中一直使用这种设置,最近我在一个新项目中使用上述步骤进行了设置。我们在 svn 中有我们的项目,它运行良好,但是将这么多文件转储到 git 中可能不太理想。