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

时间:2016-04-06 18:20:21

标签: python pip setup.py

我有两个库,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

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

但是,如果我将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

从program1运行pip install -r requirements.txt会导致错误:

error: package directory 'axel' does not exist

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

对我来说,似乎pip并不是在正常位置寻找安装包或pypi的axel,但我对此没有多少经验,所以我可能完全错了。如果我创建一个空目录lib1 / axel并为program1运行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

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

1 个答案:

答案 0 :(得分:1)

packages用于列出您正在创建的软件包中的软件包。 install_requires用于列出您的软件包所依赖的软件包。你在packages中添加了一个依赖项' axel'。没有名为' axel'的内部包,所以当然找不到具有该名称的目录。

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