通过 Python 设置工具获取远程 git 分支
Fetching remote git branch through Python setuptools
我已经讨论了一段时间了,现在问题来了。您知道我是否能够以任何方式引用 setup.py 中的 git 分支吗? “@”符号应该这样做吗?还是仅用于标记和提交?这是我尝试做的一个例子。
# setup.py
...
install_requires=['Django==1.5.11']
dependency_links=['git+https://github.com/django-nonrel/django.git@nonrel-1.5#egg=Django-1.5.11']
...
#python setup.py develop
running develop
running egg_info
...
Processing dependencies for mypackage
Searching for Django==1.5.11
Best match: Django 1.5.11
Doing git clone from https://github.com/django-nonrel/django.git to c:\users\my_user_name\appdata\local\temp\easy_install-ci3vh1\django.git@nonrel-1.5
Checking out nonrel-1.5
fatal: Not a git repository (or any of the parent directories): .git
当我没有引用任何分支时,上面的工作没有问题:
git+https://github.com/django-nonrel/django.git#egg=Django
当我用 pip 运行 时:
pip install git+https://github.com/django-nonrel/django.git@nonrel-1.5
我特意包含了包名称,因此您可以查看他们的 git 回购设置。正如我所知道的那样,我并不是要从 git 安装软件包的替代方法。就好像可以引用 setup.py 中的分支一样。
提前致谢。
只需将 egg
放在 git URL
的末尾
pip install git+https://github.com/django-nonrel/django.git@nonrel-1.5#egg=Django
我正在深入研究 setuptools 实现(https://github.com/jaraco/setuptools 保持最新的镜像以便于浏览),看起来我已经找到问题所在。如果我们查看 package_index.py:
中定义的负责下载 git repos 的函数
def _download_git(self, url, filename):
filename = filename.split('#',1)[0]
url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True)
self.info("Doing git clone from %s to %s", url, filename)
os.system("git clone --quiet %s %s" % (url, filename))
if rev is not None:
self.info("Checking out %s", rev)
os.system("(cd %s && git checkout --quiet %s)" % (
filename,
rev,
))
return filename
我们可以看到它首先将其克隆到某个目录(通常是系统临时目录),然后 "cd git checkout" 进入分支。不幸的是,最近我不得不在 Windows 上工作,我讨厌它(Arch 万岁 Linux!),这个 checkout 命令的问题是这个系统上的 cd 不会自动切换驱动器.因此,如果您的包位于临时目录之外的 partition/drive 上,它将无法正常工作。我检查了将其更正为:
(cd /d %s && git checkout --quiet %s)
问题解决。不过这是系统特定的,所以我们(可能)不想向 setuptools 人员做 PR 来修改它。相反,我所做的是在我的包文件夹中创建一个临时目录并添加
import tempfile
tempfile.tempdir=os.getcwd()+"\temp\"
到我的 setup.py,临时更改 easy_install 的临时目录。那是因为我知道 setuptools 使用 easy_install 而 easy_install 使用 tempfile 来获取临时目录的位置。这是一个很好的解决方案,我坚持使用它,但为了传播信息,我还要提到我正在尝试的另一件事是为 "cd" 到 [=24= 创建一个临时系统别名].在 windows 这是 doskey 命令。不幸的是,这是一个本地命令,不会传播到使用 os.system() 创建的子进程。全局设置这样的别名虽然很痛苦,但您不想修改潜在用户的系统注册表来实现这一点。
我已经讨论了一段时间了,现在问题来了。您知道我是否能够以任何方式引用 setup.py 中的 git 分支吗? “@”符号应该这样做吗?还是仅用于标记和提交?这是我尝试做的一个例子。
# setup.py
...
install_requires=['Django==1.5.11']
dependency_links=['git+https://github.com/django-nonrel/django.git@nonrel-1.5#egg=Django-1.5.11']
...
#python setup.py develop
running develop
running egg_info
...
Processing dependencies for mypackage
Searching for Django==1.5.11
Best match: Django 1.5.11
Doing git clone from https://github.com/django-nonrel/django.git to c:\users\my_user_name\appdata\local\temp\easy_install-ci3vh1\django.git@nonrel-1.5
Checking out nonrel-1.5
fatal: Not a git repository (or any of the parent directories): .git
当我没有引用任何分支时,上面的工作没有问题:
git+https://github.com/django-nonrel/django.git#egg=Django
当我用 pip 运行 时:
pip install git+https://github.com/django-nonrel/django.git@nonrel-1.5
我特意包含了包名称,因此您可以查看他们的 git 回购设置。正如我所知道的那样,我并不是要从 git 安装软件包的替代方法。就好像可以引用 setup.py 中的分支一样。 提前致谢。
只需将 egg
放在 git URL
pip install git+https://github.com/django-nonrel/django.git@nonrel-1.5#egg=Django
我正在深入研究 setuptools 实现(https://github.com/jaraco/setuptools 保持最新的镜像以便于浏览),看起来我已经找到问题所在。如果我们查看 package_index.py:
中定义的负责下载 git repos 的函数 def _download_git(self, url, filename):
filename = filename.split('#',1)[0]
url, rev = self._vcs_split_rev_from_url(url, pop_prefix=True)
self.info("Doing git clone from %s to %s", url, filename)
os.system("git clone --quiet %s %s" % (url, filename))
if rev is not None:
self.info("Checking out %s", rev)
os.system("(cd %s && git checkout --quiet %s)" % (
filename,
rev,
))
return filename
我们可以看到它首先将其克隆到某个目录(通常是系统临时目录),然后 "cd git checkout" 进入分支。不幸的是,最近我不得不在 Windows 上工作,我讨厌它(Arch 万岁 Linux!),这个 checkout 命令的问题是这个系统上的 cd 不会自动切换驱动器.因此,如果您的包位于临时目录之外的 partition/drive 上,它将无法正常工作。我检查了将其更正为:
(cd /d %s && git checkout --quiet %s)
问题解决。不过这是系统特定的,所以我们(可能)不想向 setuptools 人员做 PR 来修改它。相反,我所做的是在我的包文件夹中创建一个临时目录并添加
import tempfile
tempfile.tempdir=os.getcwd()+"\temp\"
到我的 setup.py,临时更改 easy_install 的临时目录。那是因为我知道 setuptools 使用 easy_install 而 easy_install 使用 tempfile 来获取临时目录的位置。这是一个很好的解决方案,我坚持使用它,但为了传播信息,我还要提到我正在尝试的另一件事是为 "cd" 到 [=24= 创建一个临时系统别名].在 windows 这是 doskey 命令。不幸的是,这是一个本地命令,不会传播到使用 os.system() 创建的子进程。全局设置这样的别名虽然很痛苦,但您不想修改潜在用户的系统注册表来实现这一点。