Q1:
我有一个启用了 Artifactory PyPi 的存储库 my-pypi-repo,我可以在其中发布我的包。通过 python setup.py -sdist
上传时,我得到这样的结构:
my-pypi-repo|
|my_package|
|x.y.z|
|my_package-x.y.z.tar.gz
问题是这个结构将不匹配 Artifactory 中任何“允许的”repo 布局,因为 [org] 或 [orgPath] 是强制性的:
Pattern '[module]/[baseRev]/[module]-[baseRev].[ext]' must at-least contain the tokens 'module', 'baseRev' and 'org' or 'orgPath'.
我设法通过将包名称“破解”到 myorg/my_package
来发布到一个路径,但是 pip 找不到它,所以它非常有用。
Q2: 有没有人尝试过使用 Artifactory 推广 Python 的“ci-repo”和“releases-repo”?
我想实现的目标:
CI repo :
my_package-1.2.3+build90.tar.gz
当这个 Artifactory 被提升时构建元数据被删除
发布 repo :
my_package-1.2.3.tar.gz
我可以通过 repo 布局实现这一点(前提是我解决了 Q1)。问题是如何处理我的 Python 脚本中的“嵌入式”版本,硬编码在 setup.py 中。
为了最佳实践,我不想再次重建包。
最佳答案
关于您的第一个问题/问题,我遇到了同样的问题。在配置我的系统以使用 pip 发布到 artifactory 时,它使用您描述的格式。
如您所述,[org]
或 [orgPath]
是强制性的,这基本上破坏了所有 REST API 功能,例如搜索最新版本等。我我目前正在使用它作为我的 Artifactory 路径模式:
[org]/[module]/[baseRev].([fileItegRev])/[module]-[baseRev].([fileItegRev]).[ext]
问题是 pip 在这种情况下不理解 [org]
的概念。我暂时使用 python 脚本将我的包发布到 Artifactory 来解决这个问题。希望 jFrog 团队可以解决这个问题。
python 脚本简单地使用 Artifactory 的 REST API 发布到我的本地 pypi 存储库,添加一些属性以便一些 REST API 函数正常工作,比如 Artifact Latest Version Search Based on Properties .
我需要能够使用该调用,因为我们在内部使用 Chef,并且我们使用该方法来获取最新版本。通过 python setup.py sdist upload -r local
发布时添加的 pypi.version
属性不适用于 REST API,因此我必须手动添加 版本
属性。说实话很痛苦,因为在使用 setup.py 的上传选项时我们无法添加属性。理想情况下,我希望能够使用 pip 完成所有操作,但目前这是不可能的。
我正在使用 requests Artifactory文档中的包和上传方法here .这是我用来发布添加一些属性的函数(如果需要,可以随意添加更多):
def _publish_artifact(name, version, path, summary):
base_url = 'http://server:8081/artifactory/{0}'.format(PYPI_REPOSITORY)
properties = ';version={0};pypi.name={1};pypi.version={0};pypi.summary={2}'\
.format(version, name, summary)
url_path = '/Company/{0}/{1}/{0}-{1}.zip'.format(name, version)
url = '{0}{1}{2}'.format(base_url, properties, url_path)
dist_file = r'{0}\dist\{1}-{2}.zip'.format(path, name, version)
files = {'upload_file': open(dist_file, 'rb')}
s = requests.Session()
s.auth = ('username', 'password')
reply = s.put(url, files=files)
logger.info('HTTP reply: {0}'.format(reply))
关于python - 具有构建提升功能的 Artifactory PyPi repo 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29102415/