如何在本地文件系统上使用包?

How to use packages on the local filesystem?

我有两个库,lib1 和 lib2 以及一个使用它们的程序 program1。 这些库有 setup.py 个如下所示的文件:

from distutils.core import setup

setup(name='lib1',
      version='0.1.0',
      maintainer='foven',
      maintainer_email='foven@example.com',
      url='example.com/lib1',
      packages=[
      ]
      )

lib2 的 setup.py 显然用 lib2 替换了 lib1 实例,但其他方面相同。

现在 program1 有一个 requirements.txt 文件,看起来像这样:

-e ../lib1
-e ../lib2

我想从它们在文件系统上的位置使用这两个库,因为我还没有准备好将它们放入存储库中。当 运行ning pip install -r requirements.txt for program1 时,这似乎有效。

但是,如果我将 lib1/setup.py 文件更改为如下所示:

from distutils.core import setup

setup(name='lib1',
      version='0.1.0',
      maintainer='foven',
      maintainer_email='foven@example.com',
      url='example.com/lib1',
      packages=[
          'axel'
      ]
      )

并将 program1/requirements.txt 更改为:

axel == 0.0.4
-e ../lib1
-e ../lib2

运行ning pip install -r requirements.txt from program1 导致错误:

error: package directory 'axel' does not exist

然而,pip list 和 pip freeze 都表明软件包已安装。

对我来说,似乎 pip 没有在安装包的正常位置或 pypi 中寻找 axel,但我对此没有太多经验,所以我可能完全错了。如果我为程序 1 创建一个空目录 lib1/axel 和 运行 pip install -r requirements.txt,它似乎可以工作:

Obtaining file:///C:/Users/foven/code/lib1 (from -r requirements.txt (line 2))
Obtaining file:///C:/Users/foven/code/lib2 (from -r requirements.txt (line 3))
Requirement already satisfied (use --upgrade to upgrade): axel==0.0.4 in c:\program files\python35\lib\site-packages (from -r requirements.txt (line 1))
Installing collected packages: lib1, lib2
  Running setup.py develop for lib1
  Running setup.py develop for lib2
Successfully installed lib1-0.1.0 lib2-0.1.0

为了清楚起见,我将重申我的目标:我希望能够将仅存在于本地文件系统上的两个库与我正在处理的程序一起使用。我做错了什么,我应该如何设置这些库和程序以我想要的方式工作?

packages is for listing the packages within the package you're creating. install_requires 用于列出你的包所依赖的包。您在 packages 中放置了依赖项 'axel'。没有名为 'axel' 的内部包,因此当然找不到具有该名称的目录。

setup(
    ...,
    install_requires=['axel'],
    ...
)