如何在Mac上安装来自Github的Python应用Portia

2 投票
4 回答
4690 浏览
提问于 2025-04-18 05:17

我正在尝试从Github安装一个叫Portia的Python应用:https://github.com/scrapinghub/portia

我在命令行中按照以下步骤操作:

  1. 在Mac终端中设置一个新的虚拟环境,命名为'portia'
  2. 使用git克隆这个项目:https://github.com/scrapinghub/portia.git
  3. 按照说明文件里的指示操作:

    cd slyd

    pip install -r requirements.txt

  4. 运行Portia

    cd slyd

    twistd -n slyd

但是每次我尝试最后一步来运行程序时,都会出现以下错误:

ImportError: No module named scrapy

你知道为什么会出现这个错误吗?之前的步骤看起来都安装得很顺利。是不是我在安装过程中哪里出错了?

谢谢!

4 个回答

0

我想你遇到的问题可能是因为虚拟环境。创建一个新的虚拟环境后,你需要运行一个激活脚本才能开始使用它。在你的情况下,你需要运行以下命令:

$ source portia/bin/activate

成功激活后,你的命令行提示符会变成这样:

(portia) $

你能检查一下在用pip安装软件包之前是否激活了你的虚拟环境吗?我觉得这样做会解决你的问题。

0

这很简单,你只需要像安装Twitter API所需的setuptools一样,安装Python模块scrapy就可以了。

pip install scrapy
1

另一种安装Portia的方法:使用Vagrant

这里有一个让我轻松安装Portia的方法。它适用于Mac、Windows和Linux。只需几个命令和点击,你就能得到一个功能齐全的网页抓取工具。

需要准备的东西:

  1. VirtualBox
  2. Vagrant
  3. 克隆Portia的代码库,或者下载压缩文件。

额外的步骤:

  1. 安装VirtualBox
  2. 安装Vagrant
  3. 打开你的终端,进入你克隆的Portia代码库所在的文件夹,或者进入你解压缩后的文件夹(如果是压缩文件的话)。

  4. 然后输入命令vagrant up - 这个命令会为你下载并设置一个VirtualBox的虚拟机,同时会安装Portia所需的所有必要组件,并从头到尾安装Portia。

完成以上步骤后,你可以打开浏览器,访问

http://the-virtualbox-ip:8000/static/main.html

这样就设置好了。

5

我没有足够的积分来给Alagappan的回答点赞,但他说得没错。如果你和我一样经验不足,可能需要更清楚的解释。

在安装任何东西之前(包括从github克隆portia),你需要先创建、激活并进入虚拟环境。下面是从头到尾的完整步骤:

1: cd 到你想存放项目的地方... 然后 安装virtualenv

$ pip install virtualenv

2: 创建虚拟环境。 (我把它叫做“portia”,但你可以随便起个名字。)

$ virtualenv portia

3: 激活你创建的虚拟环境 (如果你不是用“portia”这个名字,请把路径改成你用的名字。)

$ source portia/bin/activate

此时你的终端应该在标准目录路径提示符前显示虚拟环境的名字,像这样:(name-of-virtualenv) [你的机器]:[当前目录]: [用户]$ ...如果你列出当前目录的文件,你会看到你的虚拟环境名字在里面。

4: cd进入你的虚拟环境(对我来说是“portia”):

$ cd portia

5: 现在你可以从github克隆portia到你的虚拟环境里了...

$ git clone https://github.com/scrapinghub/portia

6: cd进入克隆下来的portia/slyd...

$ cd portia/slyd

7/8: pip安装twisted和Scrapy...

$ pip install twisted
$ pip install Scrapy

你的虚拟环境应该仍然是激活状态,并且你应该还在[虚拟环境名字]/portia/slyd里。

9: 安装requirements.txt:

$ pip install -r requirements.txt

10: 运行slyd:

$ twistd -n slyd

--- 不再出现scrapy错误! ---

撰写回答