Installing Python packages from local file system folder to virtualenv with pip
是否可以从本地文件系统使用pip安装包?
我已经为我的包运行了
现在,在虚拟环境中,我希望安装来自PYPI或特定本地位置
这有可能吗?
聚苯乙烯我知道我可以指定
如何:
1 2 3 4 | 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. |
例如,
其中/srv/pkg是可以在其中找到'setup.py'的顶级目录。
我很确定你要找的是一种叫
尽管您可能需要为本地包索引生成一个虚拟的
https://github.com/woover/pip2pi
我正在安装
我试过了公认的答案
1 | pip install --no-index --find-links=file:///Users/victor/Downloads/pyfuzzy-0.1.0 pyfuzzy |
但它也不工作,并返回以下错误:
Ignoring indexes: https://pypi.python.org/simple
Collecting pyfuzzy
Could not find a version that satisfies the requirement pyfuzzy (from versions: )
No matching distribution found for pyfuzzy
最后,我找到了一个简单的好方法:https://pip.pypa.io/en/latest/reference/pip_install.html
1 2 3 | 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 |
所以下面的命令对我有效:
1 | pip install ../pyfuzzy-0.1.0.tar.gz. |
希望它能帮助你。
这是我最终使用的解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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... ") |
我从PIP安装示例以及Rikard对另一个问题的回答中拼凑出这一点。"-pre"参数允许您安装非生产版本。"-no index"参数避免搜索pypi索引。"-find links="参数在本地文件夹中搜索(可以是相对的或绝对的)。我使用了"-log file"、"log.txt"和"-vv"参数进行调试。"-upgrade"参数允许您在旧版本上安装新版本。
我还找到了卸载它们的好方法。当您有几个不同的Python环境时,这很有用。它是相同的基本格式,只是使用"uninstall"而不是"install",并采取安全措施防止意外卸载:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | import pip def uninstall(package): response = raw_input("Uninstall '%s'? [y/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... ") |
本地文件夹包含以下文件:install.py、uninstall.py、mypackagename-1.0.zip
一个选项——find links完成任务,它从
您可以将包档案放在某个文件夹中,取最新的一个,而不必更改需求文件,例如
1 2 3 4 5 6 7 8 9 10 | . └───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 |
现在在
1 2 3 | --find-links=requirements foo_bar wiz_bang>=0.8 |
一种更新专有软件包的简单方法,只需将新软件包放到文件夹中即可。
通过这种方式,您可以安装来自
请参阅我的CookieCutter Djangopackage Fork,了解如何分割需求并使用基于文件夹的需求组织。
要求在
您可以构建本地缓存:
然后,使用这个"缓存"很简单,比如:
假设您有virtualenv和一个
1 2 3 4 5 6 7 | # 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 |
我一直在尝试做一些简单的事情,但失败得很惨,可能我很愚蠢。
无论如何,如果您有一个脚本/
1 2 3 | $ wget https://example.com/mypackage.zip $ echo"${MYPACKAGE_MD5} mypackage.zip" | md5sum --check - $ pip install file:///.mypackage.zip |
注意:我知道您可以使用
直接用
我可能做了一些非常愚蠢的事情,但最终我放弃了选择。我希望它能帮助其他人做类似的事情。