欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

win10系统64位python3.6第三方库安装问题

程序员文章站 2022-03-20 14:05:16
...

       暑假初学python,有过一点java与c++基础的我在学习过程中深深感到python的极易上手性。初步掌握基础语法后,发觉第三方库的丰富是python生态性的一大亮点。然而在比照教材安装第三方库的过程中出现了一系列问题,深受其害。像我这种接触python前对命令行一无所知的人来讲,第三方库的安装成功则罢,不成功真的是要人命。

      论坛是个解决问题的好地方。然而网上各种帖子良莠不齐鱼龙混杂,很多只讲大概不讲细节,致使小白如我在很多不是问题的问题上浪费极大的时间和精力。现总结一些自己出现的基础的问题,希望有所帮助。

      本人今年六月安装的python3.6,64位,系统win10。在python官网默认下载的版本是32位的,目前尚不清楚有何大区别。

      本文以自己安装过程中出过问题几个第三方类库为例,以常识为重,掌握这些小技巧,阅读很多网上的帖子就不会用大多障碍了

一、命令行基础使用

      win10系统下命令行可通过小娜直接输入cmd,就可以打开。此处建议右键选择管理员权限运行,避免有些操作没有权限而报错。(曾经有过一次报错的经历,百度后以管理员模式改了一个地方成功了,后来养成习惯每次都以管理员权限运行,也没再深究是否是这个因素)

      以管理员模式打开后,就要用命令行来安装第三方类库了。python的第三方类库并不是通过IDEL来安装的,而是通过命令行来调用pip.exe(pip3.exe)来进行安装。So,我们要进行的第一步就是找到这个pip.exe。方法有很多,最简单的就是找到你编写python使用的IDEL,右键查看属性,有个打开文件所在位置,这样就能找到安装在电脑上的python的位置了。如果操作之后是快捷方式也不要紧,重复操作,继续右键查看属性再打开文件。

    打开文件夹之后,找到Scripts文件夹,点击进入,然后点击上面的地址栏,将该地址新建一个txt复制到里面。因为用的太频繁我索性把这个txt放在桌面上了。进入文件夹,里面就会发现pip.exe了。之后我们打开cmd,输入 cd txt里面复制的地址,例如 cd C:\Program Files\Python36\Scripts 然后就可以将命令行的工作目录转换为C:\Program Files\Python36\Scripts这个文件夹了。里面有我们经常使用的pip、pip3和以后你下载的包使用的exe等文件。用多了嫌麻烦也可自己在我的电脑中更改环境变量的系统变量,这样就省去频繁的cd 地址这个操作了。

   ps:使用↑方向键可以复制上一条命令语句。灰常好用。

二、安装第三方库的血泪路

大部分python第三方类库的安装还是很简单的,大部分只需在cmd中进入上面所提到的Scripts文件夹,使用命令pip3 install ***就行了。

快则几秒慢则几分钟,稍等片刻就安完可以调用了。但有些第三方类库却问题连连,翻遍论坛解决方案一堆却没几个能用的,在这总结了一下自己安装第三方类库从失败到成功的方法,希望减少大家走的弯路。

2.1 numpy第三方类库

万分感谢以及跪谢这位素不相识的知乎大佬,让我在半夜两点装完numpy安心入睡。下面直接引用知乎回答内容以及原文链接。

python下numpy不成功,请问有没有简单的安装方法? - 知乎  https://www.zhihu.com/question/29521273

 我估计你用的是Windows,虽然很多人推荐你用Enthought和Anaconda但是那个会剥夺你很多学习体验。如果你知道怎么用CMD/Powershell的话,先把Python的文件夹下面的l/ib文件夹放到你的系统变量里面去,另外就是选择安装Python 2.7.9这样pip是自带的。(如果这个你不会你还是用Pre-installed IDE吧)你在cmd里面用pip安装64位系统的numpy是会出现问题的,这个很多人都遇到过,而且之后估计你还要安装Scipy,这需要用到C和Fortran的编译器你估计也没有……


所以我建议你安装wheel文件,我给你一个地址http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

看清楚根据你的python版本和你电脑的bit数来选择wheel文件。为了能够安装wheel文件,你需要首先安装wheel这个包。进到cmd里面输入pip install wheel
安装成功以后下载相应的numpy的wheel文件,在cmd里面移动到本地文件存放的地方。然后输入pip install numpy‑1.9.2+mkl‑cp27‑none‑win_amd64.whl
上面这个语句最后一部分是文件名,根据你问题的描述你应该就是下载这个文件,然后回车就可以自动安装了。你安装numpy+mkl的好处是会减少你安装scipy的阻力,安装scipy一直就不是一件惬意的事情。

当然了,如果你根本不想要这么麻烦,还是安装个Enthought, Anaconda或者PythonXY吧。


2.2 scipy库

前排说明:scipy库的安装前提是已经有numpy库,故不可先安装scipy再安装numpy。

按照2.1的方法安装完numpy库之后,用pip3 list 发现安装的numpy是带着版本号+mkl的。如numpy (1.13.1+mkl)。不是很清楚这个mkl是什么用途,但是好像没有这个安装scipy会麻烦很多。

安装scipy时,一开始我也是用pip3 install scipy 直接安装的,但是下载速度极其感人,而且下到一半就不下了。无奈去pypi找到了对应版本的scipy的whl文件(速度也很慢,但好歹不会下到一半就停止),然后下载到桌面,cmd里cd到桌面,pip3 install scipy-1.0.0-cp36-none-win_amd64.whl安装成功的。

再次推荐一下这个网站,https://www.lfd.uci.edu/~gohlke/pythonlibs/。这是一个非官方维护的第三方库的网站。记得用Ctrl+F去快速查找需要的whl文件。


三、自己常使用的包

1.you-get   常用来下载视频,格式可选,使用方便,煲剧党居家旅行必备。亲测优酷搜狐和乐视非会员视频可以下载,腾讯和爱奇艺貌似不行(果然有钱的视频网站不是吃素的

You-Get——基于Python3的媒体下载工具 - 简书  http://www.jianshu.com/p/a3f8df948395

2.request  和beautifulsoup4 用来爬取数据和解析网页的。应该是数据爬取常用的类库。

我看的教材解释的挺详细,有啥没写的单独百度找,所以并没有综合介绍的文章链接。

3.selenium 自动化测试用的(神奇的玩意),我也用它来爬取过数据。相比较与第二种,这个套上模板用起来不算很难,不需要自己找json文件,而且看起来就像自己在操作(试想半夜别人看到无人操作却不停在操作刷新的电脑。。)默认支持的是火狐浏览器,自己尝试过改成ie,失败后放弃,并成功对火狐路转粉。缺点,爬取网页时会进行渲染等与你爬取数据无用的操作,故时间耗费严重。

#selenium爬取空间说说(火狐)
#coding:utf-8

import unittest
import time
from selenium import webdriver
from bs4 import BeautifulSoup


class seleniumTest(unittest.TestCase):
    user = '**********'  # 你的QQ号
    pw = '*************'  # 你的QQ密码

    def setUp(self):
        # 调试的时候用firefox比较直观
        # self.driver = webdriver.PhantomJS()
        self.driver = webdriver.Firefox()

    def testEle(self):
        driver = self.driver
        # 浏览器窗口最大化
        driver.maximize_window()
        # 浏览器地址定向为qq登陆页面
        driver.get("http://i.qq.com")
        # 很多时候网页由多个<frame>或<iframe>组成,webdriver默认定位的是最外层的frame,
        # 所以这里需要选中一下frame,否则找不到下面需要的网页元素
        driver.switch_to.frame("login_frame")
        # 自动点击账号登陆方式
        driver.find_element_by_id("switcher_plogin").click()
        # 账号输入框输入已知qq账号
        driver.find_element_by_id("u").send_keys(self.user)
        # 密码框输入已知密码
        driver.find_element_by_id("p").send_keys(self.pw)
        # 自动点击登陆按钮
        driver.find_element_by_id("login_button").click()

        # 如果登录比较频繁或者服务器繁忙的时候,一次模拟点击可能失败,所以想到可以尝试多次,
        # 但是像QQ空间这种比较知名的社区在多次登录后都会出现验证码,验证码自动处理又是一个
        # 大问题,本例不赘述。本例采用手动确认的方式。即如果观察到自动登陆失败,手动登录后
        # 再执行下列操作。

        #r = ''
        #while r != 'y':
        #    print ("Login seccessful?[y]")
        #    r = raw_input(r)
        print ("Login seccessful?[y]")
        time.sleep(3)


        # 让webdriver操纵当前页
        driver.switch_to.default_content()
        # 跳到说说的url
        driver.get("http://user.qzone.qq.com/" + self.user + "/311")
        # 访问全部说说需要访问所有分页,需要获取本页数据后点击“下一页”按钮,经分析,“下一页”
        # 按钮的id会随着点击的次数发生变化,规律就是每点一下加一,所以需要在程序中动态的构造
        # 它的id。(或者不用id改用xpath)
        next_num = 0  # 初始“下一页”的id
        while True:
            # 下拉滚动条,使浏览器加载出动态加载的内容,可能像这样要拉很多次,中间要适当的延时(跟网速也有关系)。
            # 如果说说内容都很长,就增大下拉的长度。
            driver.execute_script("window.scrollBy(0,10000)")
            time.sleep(3)
            driver.execute_script("window.scrollBy(0,20000)")
            time.sleep(3)
            driver.execute_script("window.scrollBy(0,30000)")
            time.sleep(3)
            driver.execute_script("window.scrollBy(0,40000)")
            time.sleep(5)
            # 很多时候网页由多个<frame>或<iframe>组成,webdriver默认定位的是最外层的frame,
            # 所以这里需要选中一下说说所在的frame,否则找不到下面需要的网页元素
            driver.switch_to.frame("app_canvas_frame")
            soup = BeautifulSoup(driver.page_source)
            #, 'xml'
            contents = soup.find_all('pre', {'class': 'content'})  # 内容
            times = soup.find_all('a', {'class': 'c_tx c_tx3 goDetail'})  # 发表时间
            for content, _time in zip(contents, times):  # 这里_time的下划线是为了与time模块区分开
                #print (content.get_text(), _time.get_text())
                print("时间:"+ _time.get_text())
                print("内容:"+ content.get_text())
                print()
            # 当已经到了尾页,“下一页”这个按钮就没有id了,可以结束了
            if driver.page_source.find('pager_next_' + str(next_num)) == -1:
                break
            # 找到“下一页”的按钮
            elem = driver.find_element_by_id('pager_next_' + str(next_num))
            # 点击“下一页”
            elem.click()
            # 下一次的“下一页”的id
            next_num += 1
            # 因为在下一个循环里首先还要把页面下拉,所以要跳到外层的frame上
            driver.switch_to.parent_frame()

    def tearDown(self):
        print ('down')

if __name__ == "__main__":
    unittest.main()

4.pyecharts 图形展示。百度做的echarts移植到python上的pyecharts。图形展示功能全面,使用简单。生成的是html,有简单的交互。建议直接读GitHub上的使用文档,中文的,方便易懂。

pyecharts/documentation.md at master · chenjiandongx/pyecharts   https://github.com/chenjiandongx/pyecharts/blob/master/docs/zh-cn/documentation.md