如何使用pip安装本地的Python包?

58

问题

我使用以下命令安装了一个名为credentials的本地包:

pip install -e c:\users\worker\src\clockwork\lib\credentials

但是当我尝试从兄弟目录导入包时,它会出现ImporError错误:

cd c:\users\worker\src\clockwork\bank
python -c "import credentials"
...
ImportError: No module named 'credentials'

令人困惑的是,当我运行pip list时,包credentials被列为已成功安装:

...
credentials (1.0.0, c:\users\worker\src\clockwork\lib\credentials)
...

如何安装本地包以便导入?

背景

我正在使用Python 3.4 (32-bit)。该包包含两个文件:

credentials\__init__.py
credentials\setup.py

__init__.py 文件定义了一个函数。 setup.py 文件很短:

from distutils.core import setup

setup(name='credentials', version='1.0.0')

解决方法

目前,我将包含该软件包的目录 (c:\users\worker\src\clockwork\lib) 添加到我的 PATH 变量中作为解决方法。但我的问题是如何正确安装软件包,以便我不需要修改 PATH


你是否安装了多个版本的Python? - BrenBarn
1
在我看来,你的 setup.py 太短了。请参考文档中的示例(以及另一个示例)。你没有指定要安装的任何模块或包。 - BrenBarn
@BrenBarn 你的评论已经解决了一半的问题。另外一半是要为包创建一个子目录,并将setup.py留在父目录中。如果你把它作为答案发布,那么我会接受它。 - expz
2个回答

57

49
问题集中在setup.py文件上。它需要声明一个软件包:
from distutils.core import setup

setup(name='credentials', version='1.0.0', packages=['credentials'])

但是setup.py必须在credentials包的父目录中,因此最终的目录结构如下:

...\credentials\setup.py
...\credentials\credentials\__init__.py

经过这个更改,重新安装软件包后可以找到该模块。

这也可能是由于安装了两个Python版本导致的(但这不是我的情况),@Mr_and_Mrs_D对这种情况给出了答案。


谢谢! 这确实解决了我的问题! 还有一个问题:您是否应该将requirements.txt放在...\credentials还是...\credentials\credentials中? - Dr_Zaszuś
...\credentials 中。 - expz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接