远程存储库
一个远程存储库在Artifactory中定义的作为在远程URL中管理的注册表的缓存代理,例如https://pypi.python.org/.
从远程存储库请求的工件(例如.whl文件)会按需缓存。您可以从远程存储库缓存中删除下载的构件,但是您不能手动将构件部署到远程PyPI存储库。
要创建一个存储库来代理远程PyPI存储库,请执行以下步骤:
- 在政府模块下仓库|仓库|远程,并点击新建远程存储库.
设置包类型来PyPI然后进入库的关键价值。
URL和注册中心URL设置取决于您是代理公共外部PyPI存储库,还是代理托管在另一个Artifactory服务器上的PyPI存储库。
对于公共的、外部的PyPI存储库:改变URL字段https://files.pythonhosted.org/
,并设置注册网址字段https://pypi.org/.
对于托管在另一个Artifactory实例上的PyPI存储库:控件中设置远程存储库的PyPI API URL注册网址字段。例如,要代理一个名为“python项目
由Artifactory实例在https://my.remote.artifactory/artifactory/
,你会设置注册网址来https://my.remote.artifactory/artifactory/api/pypi/python-project如下图:PyPI远程存储库URL
你不应该包括
api / pypi
或/简单
在PyPI中远程存储库URL.这些后缀是在访问远程存储库时由Artifactory添加的。如果使用自定义PyPI远程存储库,需要确保它有一个简单的索引(目录列表风格)可以访问
< URL > /简单
.点击保存并完成.
远程Artifactory
如果远程存储库也是由Artifactory服务器管理的,那么您需要在注册网址字段。例如,
http://my.remote.artifactory/artifactory/api/pypi/python-project
虚拟存储库
Artifactory中定义的虚拟存储库聚合来自本地和远程存储库的包。
这允许您从为虚拟存储库定义的单一URL访问本地托管的PyPI包和远程代理的PyPI存储库。
要定义虚拟PyPI存储库,可以从政府模块,转到存储库|存储库|虚拟,设置其包类型的基础本地和远程PyPI存储库基本设置单击,单击保存并完成.
使用pip解决Artifactory
安装皮普
命令行工具参考PIP文档页.我们建议使用virtualenv以便在安装PIP时分离您的环境。
使用pip和Artifactory的有效SSL证书
只有当包的下载URL是一个具有有效SSL证书的受信任主机时,pip才使用来自本地缓存的包(即来自运行pip客户机的机器)。这意味着,如果您的Artifactory实例没有使用有效的SSL证书运行,那么对包的请求总是首先到达Artifactory,即使包存在于本地缓存中。
显示可用于配置的代码段皮普
而且setup . py
要使用您的PyPI存储库,请选择存储库,然后单击陷害我。
在命令行上指定存储库
指数的URL
一旦安装了pip,它可以用来指定要解析的存储库的URL:
$ PIP install frog-bar -i http://localhost:8081/artifactory/api/pypi/pypi-local/simple
使用凭证
由于它的设计,pip不支持从文件读取凭据。例如,凭据可以作为URL的一部分提供http://<用户名>:<密码> @localhost: 8081 / artifactory / api / pypi pypi-local /简单
.
密码可以省略(使用前面的冒号),在这种情况下,将提示用户以交互方式输入凭据。
通过配置文件方式
不同存储库的别名可以通过pip配置文件指定,~ / .pip / pip.conf.该文件包含每个存储库的配置参数,例如:
[global] index-url = http://user:password@localhost:8081/artifactory/api/pypi/pypi-virtual/simple
更多信息,请参考PIP用户指南.
使用需求文件
需求文件包含要安装的包的列表。通常这些是当前包的依赖项。可以手动创建,也可以使用皮普冻结
命令。索引URL可以在文件的第一行指定,例如:
——index-url http://localhost:8081/artifactory/api/pypi/pypi-local/simple PyYAML==3.11 argparse==1.2.1 frog-bar==0.2 frog-fu==0.2a nltk==2.0.4 wsgiref==0.1.2 .使用本文
出版给Artifactory
使用distutils或setuptools
Setuptools vs. distutils和python版本
Artifactory不知道你是否使用setuptools
或distutils
,以及项目使用的Python版本或实现。
下面的指令是为Python 2.7和setuptools
在心里的。使用不同版本的Python,或者不同的工具热情,distutils
其他的可能需要对下面的说明进行微小的修改。
上传到Artifactory使用setup . py
脚本的支持方式与上传到PyPI类似。首先,您需要将Artifactory添加为用户的索引服务器。
有关使用说明setuptools来打包Python项目并创建一个setup . py
脚本,请参考setuptools文档而且本教程项目.
创建$HOME/。pypirc文件
要上传到Artifactory,需要为每个存储库创建一个条目$ HOME / .pypirc
如下:
[distutils] index-servers = local pypi [pypi] repository: https://pypi.org/pypi username: mrBagthrope password: notToBeSeen [local] repository: http://localhost:8081/artifactory/api/pypi/pypi-local username: admin password: password
注意,URL不是以/简单
.
HOME环境变量
setuptools
要求.pypirc
档案可在$ HOME / .pypirc,
使用首页
环境变量。
在类unix系统上,这通常由你的系统设置为/home/yourusername /
但在某些环境中,如构建服务器,您将不得不手动设置它。
在Windows上必须手动设置。
上传认证的PyPI包到JFrog Artifactory
上传经过认证的PyPI包到JFrog Artifactory:
创建
.pypirc
使用以下代码创建文件,并为用户名添加来自JFrog Artifactory的访问令牌pypiadmin
.[distutils] index-servers = private-repository [private-repository] repository = https://soleng.jfrog.io/artifactory/api/pypi/demo-pypi-local username = pypiadmin password =eyJ2ZXIiOiIyIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYiLCJraWQiOiJsYkpadzNJUU13WXBBSWNRa01RRjN0dlA2Yml5M3dWcXdrQ0txUkxLaXhRIn0.eyJleHQiOiJ7XCJyZXZvY2FibGVcIjpcInRydWVcIn0iLCJzdWIiOiJqZmFjQDAxZTlycTMza3ljMHQxMWtwangybmcwemo1XC91c2Vyc1wvcHlwaWFkbWluIiwic2NwIjoiYXBwbGllZC1wZXJtaXNzaW9uc1wvYWRtaW4iLCJhdWQiOiIqQCoiLCJpc3MiOiJqZmZlQDAwMCIsImV4cCI6MTY4OTY5ODA5MywiaWF0IjoxNjU4MTYyMDkzLCJqdGkiOiJiZWY1YWY5Ni0zNTkyLTRiOTQtYWYyNS1kZmIxY2U1ZGU4YzIifQ.NI5OXpw0NHs7Asd3f_sY3tMyzM-2_07c3WyWEpbJrDPxO8eKoLRp10vGEF8Jo3HyRQ0H7Ybzf2-Cn8wf9yFMo4UGlgxGfm7_yc24xWVLCINjg0B2A5YRSvAetwdT2wgVPvEMUqCPSCU4_SGgGg606lIDxxImRfgZWwFn-wHfU8b8dCV7EV4dXGvH7iVb33W2JguE9KIQFP7lKkQlaErO6pGFNuPfOx1JbJllHh0oRpAPzvykda2i6Q2q3ZCObJZ9Rp8NqZYQfEm42YtIaOvAlE5fGepZgDjzHaaLcztJDHoR-BWjMiDfP0LRThHASo7F52t8p3vsZHW5NEov_trFrQ
- 复制
.pypirc
文件到您的Users文件夹。-
- 对于macOS用户,在下面创建文件
% USERPROFILE %
- 对于Windows用户,在下面创建文件
c: \用户\ <名称>
- 对于macOS用户,在下面创建文件
-
验证
setup . py
File包含以下所有字段。它应该是自动创建的,但如果不是,请将该文件添加到根文件夹中,并包含以下内容。#!/usr/bin/env python from setuptools import setup setup(name='demo-python-example', version='1.0', description='使用JFrog产品构建python项目的项目示例',author='JFrog', author_email='hth华体会最新官方网站jfrog@www.si-fil.com', packages=['helloworld'], install_required =['PyYAML>3.11', 'nltk'],)
创建一个PyPI包。
Py setup.py sdist bdist_wheel
下面显示一个示例输出。
C:\Users\johnk\helloworld>py setup.py sdist bdist_wheel running sdist running egg_info正在写入demo_python_example。蛋-info\PKG-INFO writing dependency_links to demo_python_example.egg-info\dependency_links.txt writing requirements to demo_python_example.egg-info\requires.txt writing top-level names to demo_python_example.egg-info\top_level.txt reading manifest file 'demo_python_example.egg-info\SOURCES.txt' writing manifest file 'demo_python_example.egg-info\SOURCES.txt' warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md running check creating demo-python-example-1.0 creating demo-python-example-1.0\demo_python_example.egg-info creating demo-python-example-1.0\helloworld copying files to demo-python-example-1.0... copying setup.py -> demo-python-example-1.0 copying demo_python_example.egg-info\PKG-INFO -> demo-python-example-1.0\demo_python_example.egg-info copying demo_python_example.egg-info\SOURCES.txt -> demo-python-example-1.0\demo_python_example.egg-info copying demo_python_example.egg-info\dependency_links.txt -> demo-python-example-1.0\demo_python_example.egg-info copying demo_python_example.egg-info\requires.txt -> demo-python-example-1.0\demo_python_example.egg-info copying demo_python_example.egg-info\top_level.txt -> demo-python-example-1.0\demo_python_example.egg-info copying helloworld\app.py -> demo-python-example-1.0\helloworld Writing demo-python-example-1.0\setup.cfg Creating tar archive removing 'demo-python-example-1.0' (and everything under it) running bdist_wheel running build running build_py C:\Users\johnk\installs\lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. warnings.warn( installing to build\bdist.win-amd64\wheel running install running install_lib creating build\bdist.win-amd64\wheel creating build\bdist.win-amd64\wheel\helloworld copying build\lib\helloworld\app.py -> build\bdist.win-amd64\wheel\.\helloworld running install_egg_info Copying demo_python_example.egg-info to build\bdist.win-amd64\wheel\.\demo_python_example-1.0-py3.10.egg-info running install_scripts creating build\bdist.win-amd64\wheel\demo_python_example-1.0.dist-info\WHEEL creating 'dist\demo_python_example-1.0-py3-none-any.whl' and adding 'build\bdist.win-amd64\wheel' to it adding 'helloworld/app.py' adding 'demo_python_example-1.0.dist-info/METADATA' adding 'demo_python_example-1.0.dist-info/WHEEL' adding 'demo_python_example-1.0.dist-info/top_level.txt' adding 'demo_python_example-1.0.dist-info/RECORD' removing build\bdist.win-amd64\wheel C:\Users\johnk\helloworld>
将软件包上传到JFrog Artifactory。
Py setup.py sdist upload -r private-repository
下面显示一个示例输出。
C:\Users\johnk\helloworld>py setup.py sdist bdist_wheel running sdist running egg_info正在写入demo_python_example。蛋-info\PKG-INFO writing dependency_links to demo_python_example.egg-info\dependency_links.txt writing requirements to demo_python_example.egg-info\requires.txt writing top-level names to demo_python_example.egg-info\top_level.txt reading manifest file 'demo_python_example.egg-info\SOURCES.txt' writing manifest file 'demo_python_example.egg-info\SOURCES.txt' warning: sdist: standard file not found: should have one of README, README.rst, README.txt, README.md running check creating demo-python-example-1.0 creating demo-python-example-1.0\demo_python_example.egg-info creating demo-python-example-1.0\helloworld copying files to demo-python-example-1.0... copying setup.py -> demo-python-example-1.0 copying demo_python_example.egg-info\PKG-INFO -> demo-python-example-1.0\demo_python_example.egg-info copying demo_python_example.egg-info\SOURCES.txt -> demo-python-example-1.0\demo_python_example.egg-info copying demo_python_example.egg-info\dependency_links.txt -> demo-python-example-1.0\demo_python_example.egg-info copying demo_python_example.egg-info\requires.txt -> demo-python-example-1.0\demo_python_example.egg-info copying demo_python_example.egg-info\top_level.txt -> demo-python-example-1.0\demo_python_example.egg-info copying helloworld\app.py -> demo-python-example-1.0\helloworld Writing demo-python-example-1.0\setup.cfg Creating tar archive removing 'demo-python-example-1.0' (and everything under it) running bdist_wheel running build running build_py C:\Users\johnk\installs\lib\site-packages\setuptools\command\install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. warnings.warn( installing to build\bdist.win-amd64\wheel running install running install_lib creating build\bdist.win-amd64\wheel creating build\bdist.win-amd64\wheel\helloworld copying build\lib\helloworld\app.py -> build\bdist.win-amd64\wheel\.\helloworld running install_egg_info Copying demo_python_example.egg-info to build\bdist.win-amd64\wheel\.\demo_python_example-1.0-py3.10.egg-info running install_scripts creating build\bdist.win-amd64\wheel\demo_python_example-1.0.dist-info\WHEEL creating 'dist\demo_python_example-1.0-py3-none-any.whl' and adding 'build\bdist.win-amd64\wheel' to it adding 'helloworld/app.py' adding 'demo_python_example-1.0.dist-info/METADATA' adding 'demo_python_example-1.0.dist-info/WHEEL' adding 'demo_python_example-1.0.dist-info/top_level.txt' adding 'demo_python_example-1.0.dist-info/RECORD' removing build\bdist.win-amd64\wheel C:\Users\johnk\helloworld>
- 您的包已成功上传到JFrog平台。通过导航到查看应用程序>Artifactory>工件寻找包裹。
上传
创建一个.pypirc
文件和setup . py
脚本在你的项目的根目录,你可以上传你的egg (tar.gz)包如下:
~/python_project $ python setup.py sdist upload -r local .py
如果你正在使用车轮(whl
),你可按以下方式上载你的资料包:
~/python_project $ python setup.py bdist_wheel upload -r local .py
或者如果你想同时使用鸡蛋(tar.gz
)和车轮(whl
),你可按以下方式上载:
~/python_project $ python setup.py sdist bdist_wheel upload -r local .py
在哪里当地的你的书中有章节的名称吗.pypirc
指向Artifactory PyPI存储库的文件。
默认的上传
默认情况下,两者setuptools
而且distutils
将上传至https://pypi.org/pypi
如果没有指定存储库。
'register'命令应该被省略
当直接上传至pypi.org
,文档说明您的包必须首先注册通过调用python setup . py登记。
当上传到Artifactory时,这既不需要也不支持应该省略.
通过Web UI或REST手动发布
方法手动上传PyPI包Web UI或者是Artifactory REST API.为了让Artifactory正确地将这些包作为PyPI包处理,它们必须与之一起上传pypi.name
而且pypi.version
属性。
属性的自动提取
在索引新上传的包时,Artifactory将自动尝试从文件中保存的包元数据中提取所需的属性。注意,并不是所有受支持的文件都可以解压缩。
目前,只有邮政编码
,焦油
,tgz
,tar.gz
,tar.bz2
,蛋
而且whl
可以为元数据提取文件。
此外,索引在60秒静默期后启动,从最后一次上传到当前存储库开始计数。
搜索PyPI包
使用脉冲
Artifactory支持搜索使用皮普的搜索命令在本地、远程和虚拟存储库中。例如:
安装:0.2a(最新)$ pip search irbench——index http://localhost:8081/artifactory/api/pypi/pypi-virtual/ irbench -图像检索基准。
在这个例子中frog-fu是本地安装的包,而irbench在pypi.org
的聚合的两个存储库pypi-virtual
存储库。
指定索引
在使用搜索命令时,应该显式指定索引(不包含/简单
最后),因为PIP将忽略index-url
变量pip.conf
文件。
Artifactory搜索
还可以使用Artifactory的属性搜索来搜索PyPI包。所有的PyPI包都具有这些属性pypi.name
,pypi.version
而且pypi.summary
由上传客户端设置,或稍后在索引支持的文件类型时设置。
查看PyPI包元数据
Artifactory允许您直接从UI查看PyPI包的选定元数据。
在工件模块树浏览器,向下钻取以选择要检查的文件。元数据显示在PyPI信息选项卡。
使用带有自定义注册表后缀的远程存储库
你可以设置一个自定义后缀,而不是像DevPi那样的默认后缀。
设置devpi
注册表后缀到服务器后缀:
在URL和注册表URL中使用根URL。例如:http://m.devpi.net
.
为了进行搜索,在索引URL中包含所需的范围(如devpi
例如,它可能是根/ pypi
).
$ PIP search frog-fu -index http://localhost:8081/artifactory/api/pypi/devpi/root/pypi/
要安装,需要在索引url中包含所需的作用域(就像在devpi的例子中一样,它可以是根/ pypi
)
$ PIP install frog-bar -i http://localhost:8081/artifactory/api/pypi/devpi/root/pypi/simple