使用-e选项从GitHub安装pip到虚拟环境未能将包添加到Python路径

7 投票
4 回答
6898 浏览
提问于 2025-04-17 16:55

我正在尝试从我的 GitHub 上安装一个包,并希望以“可编辑”模式(-e)进行安装,这样我就可以在使用这个包的同时,方便地对它进行修改。

但是安装后出现了问题,因为它在 Python 的路径中找不到。

我创建并激活了一个新的虚拟环境“publisher”,然后运行了以下命令:

pip install -e git+https://github.com/roberts81/easy-thumbnails.git#egg=easy_thumbnails
Obtaining easy-thumbnails from git+https://github.com/roberts81/easy-thumbnails.git#egg=easy_thumbnails
  Cloning https://github.com/roberts81/easy-thumbnails.git to /Users/ben/Envs/publisher/src/easy-thumbnails
  Running setup.py egg_info for package easy-thumbnails

    no previously-included directories found matching 'docs/_build'
Installing collected packages: easy-thumbnails
  Running setup.py develop for easy-thumbnails

    no previously-included directories found matching 'docs/_build'
    Creating /Users/ben/Envs/publisher/lib/python2.7/site-packages/easy-thumbnails.egg-link (link to .)
    Adding easy-thumbnails 1.2 to easy-install.pth file

    Installed /Users/ben/Envs/publisher/src/easy-thumbnails
Successfully installed easy-thumbnails
Cleaning up...

然后如果我在这个虚拟环境中运行 Python,并尝试从这个包中导入任何东西,就会失败。

Python 2.7.2 (default, Jun 20 2012, 16:23:33) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import easy_thumbnails
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named easy_thumbnails
>>> 

如果我不使用 -e 选项来安装,一切都正常。我发现其他的库也是这样,比如运行 pip install -e git+http://github.com/django/django.git@stable/1.5.x#egg=django 之后,它们也没有出现在 Python 的路径中。那么这是怎么回事呢?

我注意到一个问题,就是虽然提示说在更新 easy-install.pth 文件,但实际上似乎并没有更新……这里面有点奇怪。

不过如果我用 sudo 来运行这个安装命令,就能成功!而且我也可以在全局环境中安装这个包(当然是用 sudo),这样也能正常工作。

版本信息:

pip==1.2.1
virtualenv==1.8.4
virtualenvwrapper==3.6
python==2.7.2
Mac OSX 10.8.2

4 个回答

2

这可能现在看起来有点傻,因为问题已经解决了,而且这其实是另一个问题——但这对我来说是解决这个错误的方法。(我希望这能帮助到其他人)

确保你有一个 __init__.py 文件。文件结构应该像这样:

/myprojectname
  /myprojectname
    __init__.py
    mymodule.py
  setup.py

然后在顶层的 myprojectname 文件夹中运行 "pip install -e .",这样一切就能正常工作了。在我的情况下,我忘记了 __init__.py 文件,也忘记了这可能是导致那个提示的原因。

2

在我这里,使用 pip 1.2.1 和 virtualenv 1.8.4 一切正常:

$ virtualenv -p python2.7 venv
Running virtualenv with interpreter /usr/local/bin/python2.7
New python executable in venv/bin/python
Installing setuptools............done.
Installing pip...............done.

$ source venv/bin/activate

$ pip install -e git+https://github.com/roberts81/easy-thumbnails.git#egg=easy_thumbnails
Obtaining easy-thumbnails from git+https://github.com/roberts81/easy-thumbnails.git#egg=easy_thumbnails
  Cloning https://github.com/roberts81/easy-thumbnails.git to ./venv/src/easy-thumbnails
  Running setup.py egg_info for package easy-thumbnails

    no previously-included directories found matching 'docs/_build'
Installing collected packages: easy-thumbnails
  Running setup.py develop for easy-thumbnails

    no previously-included directories found matching 'docs/_build'
    Creating /Users/jterrace/test/venv/lib/python2.7/site-packages/easy-thumbnails.egg-link (link to .)
    Adding easy-thumbnails 1.2 to easy-install.pth file

    Installed /Users/jterrace/test/venv/src/easy-thumbnails
Successfully installed easy-thumbnails
Cleaning up...

$ python
Python 2.7.3 (default, Nov 12 2012, 09:50:25) 
[GCC 4.2.1 Compatible Apple Clang 4.1 ((tags/Apple/clang-421.11.66))] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import easy_thumbnails
>>> easy_thumbnails.VERSION
'1.2'
1

我之前遇到过类似的问题,解决的方法是先删除我的虚拟环境,然后重新创建一个,激活它,接着(在做其他事情之前)更新一下环境里的pip和setuptools。首先,打开一个新的终端窗口(这样可以确保虚拟环境没有被激活),然后进入你虚拟环境所在目录的上一级。接下来输入:

rm -rf env
virtualenv env
. env/bin/activate
pip install -U pip setuptools

完成这些步骤后,我就能通过pip从GitHub安装那个包,并且可以在Python中导入它了。

撰写回答