是否可以使用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搜索的另一个地方,如果我键入pip install mypackage。


当前回答

我很确定你要找的是——找到链接选项。

你可以这样做

pip install mypackage --no-index --find-links file:///srv/pkg/mypackage

其他回答

我很确定你要找的是——找到链接选项。

你可以这样做

pip install mypackage --no-index --find-links file:///srv/pkg/mypackage

是什么::

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.

例如,PIP install -e /srv/pkg

其中/srv/pkg是顶层目录,其中可以找到“setup.py”。

如果你想安装一个本地包(包A)来在另一个本地项目/包(B)中使用,这是相当简单的。你所需要的是CD到(B),并致电:

pip install /path/to/package(A)

当然,你需要先编译包(A):

sudo python3 ./setup.py install

而且,每次你改变包A时,只要在包(A)中再次运行setup.py,然后pip install…在使用项目/包的内部(B)

一个选项——find-links就可以完成这项工作,并且它可以从requirements.txt文件中工作!

你可以将包存档放在某个文件夹中,并在不更改需求文件的情况下获取最新的包存档,例如需求:

.
└───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

现在在requirements/base.txt中输入:

--find-links=requirements
foo_bar
wiz_bang>=0.8

一个整洁的方法来更新专有软件包,只需在文件夹中删除一个新的

通过这种方式,您可以从本地文件夹和pypi安装包,只需调用pip install -r requirements/production.txt即可

PS.请参阅我的cookiecutter-djangopackage fork,了解如何分割需求和使用基于文件夹的需求组织。

在requirements.txt和egg_dir中有需求作为目录

您可以构建本地缓存:

$ PIP download -r requirements.txt -d eggs_dir

然后,使用“缓存”很简单,就像:

$ PIP install -r requirements.txt——find-links=eggs_dir