是否可以使用本地文件系统中的pip安装软件包?
我已经运行python setup.py sdist
了我的包,它创建了相应的tar.gz文件.该文件存储在我的系统中/srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.
现在,在虚拟环境中,我想安装来自pypi或来自特定本地位置的软件包/srv/pkg
.
这可能吗?
PS
我知道我可以指定pip install /srv/pkg/mypackage/mypackage-0.1.0.tar.gz
.这将有效,但我正在谈论/srv/pkg
如果我打字,使用该位置作为点子搜索的另一个地方pip install mypackage
.
drp*_*poo 423
关于什么::
pip install --help
...
-e, --editable <path/url> Install a project in editable mode (i.e. setuptools
"develop mode") from a local project path or a VCS url.
Run Code Online (Sandbox Code Playgroud)
例如, pip install -e /srv/pkg
其中/ srv/pkg是可以找到'setup.py'的顶级目录.
Mik*_*maa 120
我很确定你要找的东西叫做--find-links
选项.
虽然您可能需要index.html
为本地包索引生成一个虚拟列表,该索引列出了指向所有包的链接.此工具有助于:
https://github.com/wolever/pip2pi
dim*_*im8 43
从安装包页面,您可以简单地运行:
pip 安装 /srv/pkg/mypackage
其中/srv/pkg/mypackage是包含setup.py的目录。
另外1,您可以从存档文件安装它:
pip install ./mypackage-1.0.4.tar.gz
1 尽管在问题中有所指出,但由于其受欢迎程度,它也包括在内。
Vic*_*hoy 33
我正在安装,pyfuzzy
但不在PyPI中; 它返回消息:No matching distribution found for pyfuzzy
.
我尝试了接受的答案
pip install --no-index --find-links=file:///Users/victor/Downloads/pyfuzzy-0.1.0 pyfuzzy
Run Code Online (Sandbox Code Playgroud)
但它也不起作用并返回以下错误:
忽略索引:https: //pypi.python.org/simple收集pyfuzzy无法找到满足要求pyfuzzy的版本(来自版本:)没有找到pyfuzzy的匹配的发行版
最后,我在那里找到了一个简单的好方法:https: //pip.pypa.io/en/latest/reference/pip_install.html
Install a particular source archive file.
$ pip install ./downloads/SomePackage-1.0.4.tar.gz
$ pip install http://my.package.repo/SomePackage-1.0.4.zip
Run Code Online (Sandbox Code Playgroud)
所以以下命令对我有用:
pip install ../pyfuzzy-0.1.0.tar.gz.
Run Code Online (Sandbox Code Playgroud)
希望它可以帮到你.
Dev*_*ams 21
这是我最终使用的解决方案:
import pip
def install(package):
# Debugging
# pip.main(["install", "--pre", "--upgrade", "--no-index",
# "--find-links=.", package, "--log-file", "log.txt", "-vv"])
pip.main(["install", "--upgrade", "--no-index", "--find-links=.", package])
if __name__ == "__main__":
install("mypackagename")
raw_input("Press Enter to Exit...\n")
Run Code Online (Sandbox Code Playgroud)
我从pip安装示例和Rikard关于另一个问题的答案拼凑了这个."--pre"参数允许您安装非生产版本."--no-index"参数避免搜索PyPI索引."--find-links =." 参数在本地文件夹中搜索(这可以是相对的或绝对的).我使用"--log-file","log.txt"和"-vv"参数进行调试."--upgrade"参数允许您安装较旧的版本.
我也找到了卸载它们的好方法.当您有几个不同的Python环境时,这很有用.这是相同的基本格式,只使用"卸载"而不是"安装",并采取安全措施来防止意外卸载:
import pip
def uninstall(package):
response = raw_input("Uninstall '%s'? [y/n]:\n" % package)
if "y" in response.lower():
# Debugging
# pip.main(["uninstall", package, "-vv"])
pip.main(["uninstall", package])
pass
if __name__ == "__main__":
uninstall("mypackagename")
raw_input("Press Enter to Exit...\n")
Run Code Online (Sandbox Code Playgroud)
本地文件夹包含以下文件:install.py,uninstall.py,mypackagename-1.0.zip
Jan*_*zny 12
一个选项--find-links完成工作,它可以从requirements.txt
文件中运行!
您可以将包存档放在某个文件夹中,并在不更改需求文件的情况下获取最新的文件夹,例如requirements
:
.
????requirements.txt
????requirements
????foo_bar-0.1.5-py2.py3-none-any.whl
????foo_bar-0.1.6-py2.py3-none-any.whl
????wiz_bang-0.7-py2.py3-none-any.whl
????wiz_bang-0.8-py2.py3-none-any.whl
????base.txt
????local.txt
????production.txt
Run Code Online (Sandbox Code Playgroud)
现在requirements/base.txt
放在:
--find-links=requirements
foo_bar
wiz_bang>=0.8
Run Code Online (Sandbox Code Playgroud)
一种更新专有软件包的简洁方法,只需在文件夹中删除新软件包即可
通过这种方式,您可以使用相同的单个调用从local folder
AND 安装软件包pypi
:pip install -r requirements/production.txt
PS.请参阅我的cookiecutter-djangopackage fork,了解如何拆分需求并使用基于文件夹的需求组织.
假设你有 virtualenv 和一个requirements.txt
文件,那么你可以在这个文件中定义从哪里获取包:
# Published pypi packages
PyJWT==1.6.4
email_validator==1.0.3
# Remote GIT repo package, this will install as django-bootstrap-themes
git+https://github.com/marquicus/django-bootstrap-themes#egg=django-bootstrap-themes
# Local GIT repo package, this will install as django-knowledge
git+file:///soft/SANDBOX/python/django/forks/django-knowledge#egg=django-knowledge
Run Code Online (Sandbox Code Playgroud)
要仅从本地安装,您需要 2 个选项:
--find-links
:在哪里寻找依赖关系。不需要file://
别人提到的前缀。--no-index
:不要在 pypi 索引中查找缺少的依赖项(依赖项未安装且不在路径中--find-links
)。因此,您可以从任何文件夹运行以下命令:
pip install --no-index --find-links /srv/pkg /path/to/mypackage-0.1.0.tar.gz
Run Code Online (Sandbox Code Playgroud)
如果您的 mypackage 设置正确,它将列出其所有依赖项,如果您使用 pip download 来下载依赖项级联(即依赖项的依赖项等),则一切都会正常。
如果您想在可访问的情况下使用 pypi 索引,但如果不可访问则回退到本地轮子,您可以删除--no-index
并添加--retries 0
. 当它尝试检查 pypi 是否缺少依赖项(未安装)时,您会看到 pip 暂停一会儿,当它发现无法访问它时,将回退到本地。似乎没有办法告诉 pip “首先查找本地的,然后是索引”。
其要求requirements.txt
,并egg_dir
作为目录
您可以构建本地缓存:
$ pip download -r requirements.txt -d eggs_dir
然后,使用该“缓存”很简单,例如:
$ pip install -r requirements.txt --find-links=eggs_dir
归档时间: |
|
查看次数: |
360354 次 |
最近记录: |