当前位置:聪少自媒体网 > 豆瓣 > 正文

豆瓣东西分享能赚钱吗,豆瓣官网的搜索结果

2020-11-02 豆瓣 聪少自媒体

Scrapy进阶-防ban策略

在再识Scrapy-下载豆瓣图书封面中我们学会了如何下载图片。但是在大批量爬取的时候我们最怕的就是被网站ban了。官网提供了几种方法:

1. download_delay

因为我们要大批量爬取网页,为了防止过分密集影响到别人的服务器,建议在setting.py中设置DOWNLOAD_DELAY=2,最好是在晚上睡觉的时候跑,这样虽然速度慢了一点,但是被dan的几率会降低很多哦。

2. 禁止cookies

cookies,是指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密),有的时候我们需要登录网站进行爬取数据,所以cookies很重要,但是当我们不需要让网站记住我们的是谁的时候,那么禁止cookies也就防止了可能使用cookies识别爬虫轨迹的网站得逞。

在settings.py中设置COOKIES_ENABLES=False。也就是不启用cookies middleware,不想web server发送cookies。

3. 变换user agent

user agent是指包含浏览器信息、操作系统信息等的一个字符串,也称之为一种特殊的网络协议。服务器通过它判断当前访问对象是浏览器、邮件客户端还是网络爬虫。之前爬取豆瓣的时候我们就把原来自表爬虫身份的user agent改了。

user agent

如果只用一个user agent 爬取太多次也会让服务器产生怀疑的,所以我们需要大量的user agent用来建立user agent pool。并通过DOWNLOADER_MIDDLEWARES切换agent。

DOWNLOADER_MIDDLEWARES

建立一个middlewares.py, 内容如下:

# -*- coding: utf-8 -*-

import random

from scrapy.conf import settings

class RandomUserAgent(object):

"""Randomly rotate user agents based on a list of predefined ones"""

def __init__(self, agents):

self.agents=agents

@classmethod

def from_crawler(cls, crawler):

return cls(crawler.settings.getlist('USER_AGENTS'))

def process_request(self, request, spider):

ua=random.choice(self.agents)

request.headers.setdefault('User-Agent', ua)

下面两个方法目前不会,先占位

4. 使用proxy

5. 分布式爬取

文章

数据采集 · 数据安全/隐私保护 · Python · 网络协议 · 中间件

2016-06-08

抖音快手淘宝直播带货盛行,企业是否还要做官网? 网站建设公司哪家比较好?

01

当前,抖音快手淘宝直播带货盛行。

前有薇娅、李佳琦、辛巴、二驴、散打哥等一众职业主播,引爆网红经济,后有董明珠、梁建章、丁磊、李彦宏、张朝阳等众多企业家,争相直播助力带货;同时网上也流传着“不会带货的ceo不是好的ceo”这样的说法,甚至前段时间看到一则新闻,投资人直接问企业,你们的负责人能不能像董明珠那样去直播带货,此外还有李小璐、刘涛、张庭等众多明星也纷纷加入,跑到各大短视频平台去直播卖货...可见直播带货这件事当下的火爆程度与影响力。

短视频直播卖货能火,其实一点也不奇怪,不是今天,也会是明天(疫情无疑加快了这件事的进程)。为什么说短视频直播带货是趋势也是必然?原因很简单。

人在哪,生意就在哪。

互联网3.0时代,各家互联网公司对用户的争夺极其凶猛,对流量的渴望更是达到了前所未有的程度。对用户的争夺,本质上是对用户时间的占有,以抖音快手为首的直播平台赶上了最好的时机,借助智能手机的普及,以及互联网进入下半场这股东风,迅速占领了用户心智,宣告短视频时代崛起。

和视频相比,图文显然成了一种落后的信息传递方式。视频的形式相比图文展示更好的解决了信息不对称的问题,提升了从了解产品到购买整个路径的效率。图文时代已经是过去式,现在虽然还在用但已经不是主流,视频时代就是下一个高阶的存在,目前是短视频,未来可能还会发展长视频,5G网络的全面普及无疑会让视频时代如虎添翼。

直播带货是短视频平台最好的变现方式,至少目前是。

抖音快手这些直播平台本身的开发运维成本都很高,前期都是烧钱模式,它们的终极目的也绝不是记录生活或者娱乐社交这么简单。企业都是以营利为目的,最终都要考虑如何变现的问题,抖音快手发展到如今的体量,仅日活就好几个亿,如此巨大的流量,作为平台其实早就打好了自己的算盘,不可能只是为了卖广告位去做这个事。如果说还有什么因素加快了短视频直播带货的步伐,那就是电商时代的全面来临和疫情的影响,后者无论在用户时间的占领上,还是进一步将用户驱使到线上交易,无疑都起到了很大的作用。

至于淘宝直播带货,就更不难理解了。作为国内电商领域的执牛耳者,貌似没有比淘宝更懂消费者更懂卖货的了,可是互联网信息时代唯一不变的就是变化,淘宝还没醒过神儿来呢,就连同京东等被贴上了“古典电商”的标签,更是大有被拼多多这样的小兄弟弯道超车的趋势,你说它后背能不发凉吗?放眼望去,发现已是短视频的天下,不过对于淘宝这种本身就最早具有互联网基因的电商巨无霸来说,搞个直播还不简单嘛?毕竟疫情带来的消费疲软,以及这些互联网新贵们瓜分市场都迫在眉睫,淘宝作为曾经甩同行几条街的存在,怎么可能容忍自己被时代抛弃?

毋庸置疑,直播带货是未来趋势,是一种高效的信息传递工具。但现阶段直播行业野蛮发展,直播的价值被严重高估了。

其实稍微懂一点的朋友都能看明白,直播带货的泡沫正在越吹越大。终有一天,神话不再,潮水褪去就能看到谁在裸泳。“2015年,某平台主播在直播游戏时,系统显示观看人数竟然超过了13亿”,网上近日又爆出了快手主播小伊伊直播带货数据涉嫌造假,“据第三方数据机构统计,这场直播的实际销售额为867万元,与快手官方公布的1.05亿元有一定差距。”

抛开数据造假、注水不谈(早已成为业内公开的秘密),在由品牌方、主播、平台、MCN机构四方参与的这场直播带货博弈中,真正赚钱的只有部分头部主播和平台,MCN机构抛去各种运营成本之后也所剩无几,而其中最惨的要数品牌方。割肉、让利、赔本赚吆喝,还不见得有效果,一场直播投入大几十万,成交量却少得可怜,最后只能打掉牙往肚子里咽,一肚苦水无处倾诉。

与直播带货被严重高估形成反差的是,企业官网的价值有些被低估。线上营销的方式其实有很多种,直播带货或许只是其中最无奈的一种方式(是趋势但并未被市场验证)。企业要想在线上掀起一股营销狂潮获得更多订单,可以多渠道尝试,除了借助第三方流量平台比如:公众号、门户网站、搜索引擎、B站知乎豆瓣小红书、直播平台等,企业官网也是可以利用起来的。

02

抖音快手淘宝直播带货盛行,公司是否还要做官网?

这个问题就好比:邻居家的小孩很优秀,自家的孩子现在努力还来得及吗?(这两个问题本质上是一样的)

直播平台带货目前确实很盛行,可它不妨碍你们公司做官网呀。。。除非你们公司也想进军直播领域,,,可即便是抖音快手,所属公司字节跳动和快手科技都有自己的官网。

我知道,这个问题真正想要传达的意思其实是,直播平台卖货都这么流行了,还有必要做公司官网吗?干嘛不把公司产品直接放到抖音快手上去卖?或者公司自己开发一款类似抖音快手的直播平台卖自己的产品?有这种疑问的人,本质上是对公司官网的作用和价值都不太了解。

首先,我们需要知道公司官网是什么?有哪些作用?功能和价值分别是什么?

公司官网说直白点,就是一家公司的“门面”,也是互联网时代企业的一张对外的名片。通过官网,可以向外传达很多信息,比如这家公司是做什么业务的,有哪些产品,实力如何等等...可能会有人反驳说,公司官网并不能反映实力,确实存在这种可能,实力不行的公司一样可以拥有非常酷炫、高逼格的官网,因为建个网站花不了多少钱...但是如果一家公司连自己的官网都没有,又能指望它有什么实力呢?

我有位前同事,离职以后自己出来创业,成立了一家教育行业的内容营销公司,业务做得有声有色。但是之后发生的一个事完全改变了她对企业官网的认识。之前她也觉得公司官网这种东西可有可无,所以就没做。有一天线上来了个咨询的学生,因为对我同事她们公司生产的内容很认可,希望能进一步了解,这个学生意向度很高,完全可以签单,但他提出想要去我同事她们公司官网看看,这时我同事才想起来她们根本没有官网。尴尬之余,只能向同学解释她们是创业型公司,还没来得及制作官网,资料已经提交正在审核云云...希望同学能去她们北京的公司看看,见面详谈。可是学生告诉她,人家在外地来北京不方便。再之后,就没有然后了,大概这个学生觉得没有官网的公司不值得信赖。。。这件事之后,我同事她们公司花钱找人做了官网,然而这个单子已经无法挽回,想起来多少还是有些遗憾的。可见,官网这个东西对企业来说,还是很必要的。

远的不说,公司成立之初肯定需要组建团队吧,没有官网,连招人都会是问题。就我个人求职经验来说,在去一家公司应聘之前我肯定要先去天眼查、企查查类似平台看一下这家公司的基本经营情况,有没有官司、负面消息等等,其次我会去这家公司的官网看看,如果没有那我就会想,一家连官网都不重视的公司会靠谱吗?首先肯定不是不屑去做(说实话这样的公司我至今还闻所未闻过),强如世界500强的企业,也没有哪家敢说:我们就是不屑于去做官网。所以,这种能联想到的就只有一种情况,这家公司没钱做官网!很有可能是家皮包公司?即使想方设法招到了人,质量又能有多高?现代企业的发展都是依赖于人才,没有官网让牛人通过什么途径了解你这家公司呢?

其次,公司没有官网,销售人员如何去谈客户签单子?难道指望他们全凭三寸不烂之舌就能取得客户信任吗?一点都不现实。即使真有这样的销售奇才通过个人能力就能获得客户的初步信任,那也需要官网进一步打消客户的疑虑,从而促成签约,否则客户明明和你们的销售人员聊得很好,却最终选择了和你的竞争对手签约,你都不明白怎么回事,其实可能他们只是比你们多了一个公司官网而已...可能有人会觉得我言过其实,但真实情况可能远比我说的还要夸张。

仔细想想,一家企业凭什么选择和你们公司合作?还不是因为信任。如何解决客户的信任问题才是现代企业最需要花心思去思考的事,之后的转化和成交不过是水到渠成的事。当然,这并不是说公司有个官网就够了,其他什么都不用做就能获得客户信任,而是说,你公司有官网,客户自己就会去了解,做一些主观判断,虽然你可能并不知道他什么时候会去了解...在了解过你公司官网后,最起码会给客户一种印象,觉得这家公司还行(如果官网很漂亮自然更加分),之后在具体的产品业务洽谈环节,如果你们进展顺利,那这个客户基本不会跑。但如果你公司连官网都没有,人家客户为什么要跟你谈?谈毛线!

回到前面的问题,为什么不把公司产品直接放到抖音快手上去卖?或者公司自己开发一款类似抖音快手的直播平台卖自己的产品?想必大家都知道,在抖音快手花钱做推广的费用并不低,单条视频的广告投放费用可能就够你做一个或者几个官网了,更不要说一场规模和配置都可观的直播了,为此你可能需要付出的代价是几万到几十万不等的预算(具体能卖出去多少货这个谁也不能保证),有这些钱够你做几十个官网了!至于公司自己开发一款抖音或者快手,这个就更是天方夜谭了...还是踏踏实实、老老实实花点小钱建个官网来得实在。花钱雇网红卖你的货同样不靠谱,没人比你自己更了解你的产品优势,指望一次直播就能带来源源不断的客流,还是洗洗睡吧,能捞个一锤子买卖就不错了,还要什么自行车?更何况不是所有的产品都适合在直播上卖,比如有些没有实物的服务类产品就不适合。

其实,不管你的公司规模大还是小,也不管从事哪方面业务,是卖具体产品还是提供某项服务,是营利性质的企业还是某个政务宣传单位,官网都是很有必要的,这个钱省不得,也没必要省,因为本身就没多少,以我对建站市场的了解,搭建一个网站的价格从几百元到上万元不等,应有尽有,类型也是有自助建站、模板建站、定制建站等可供选择,根据自身需求,量体裁衣即可。

从成本投入上看,制作公司官网是一件低成本的事。然而,从价值回报层面看,公司官网能为企业带来的好处大多是隐性的,可能这也是有些人觉得公司官网过时或者比较鸡肋的主要原因。对于一些以卖货为主的企业来说(比如华为商城、小米商城),公司官网带来的好处是肉眼可见的,即一笔笔订单。但是对于更多企业来说,他们并不需要在官网售卖产品,这种情况下官网就成了很好的品宣窗口。通过官网,所有访客可以了解这家公司的企业文化、价值观、使命愿景等品牌相关信息,用来加深印象或者佐证自己的判断,解决信任问题。

互联网时代即网络营销的时代,大部分生意都来自线上,当下受疫情影响,线上营销的重要性愈加凸显,企业如果没有官网,拿什么给客户看呢?再说直白点,退一万步讲,即使公司官网真的不能为企业带来任何经济效益(这当然不可能),就放弃制作了吗?在这个官网即企业标配的时代,别人都有就你没有,怎么和竞争对手竞争?

03

最后,说说如何选择建站公司。

建站行业由来已久,少说也有十几年的发展史,在这个过程中不断有大大小小的公司涌入,也陆续有很多被淘汰出局。其实就发展规律来说,建站行业和其他行业并无本质上的差别,都是由供不应求逐渐发展直至市场饱和这样一个状态,这个过程中既会有一些真正不错的公司出现,也会有一些搅局者不断涌入,总之,泥沙俱下。

面对这样的行业现状,很多人确实在选择建站公司的时候比较懵,没有头绪。可能有人会说,选贵的不就好了?其实不然。虽然通常情况下,好的东西不会卖的太便宜,但不好的东西也是可以卖的很贵的!就拿建网站来说,花高价不见得就能享受到好的产品优质的服务,建站行业其实也是鱼龙混杂,选择一家不错的建站公司显得尤为重要。

具体选择哪家,这个我没法告诉你,为避免广告嫌疑,我只能给一些建议,比如选择建站公司时应该遵循哪些原则,注意哪些点等等。

结合我自己过往经验和对建站行业的了解综合分析,如果要找一家建站公司制作官网,在你对这个行业整体不了解的情况下,建议首选大品牌(比如阿里云),因为大平台都是很注重口碑和品牌形象的,搞砸客户或者出现负面消息,是他们最不愿意看到的事情。即使对他们的产品和服务都不满意,你也可以要求更换服务甚至退款,大品牌重视用户体验,如果不满意可以在规定时间内全额退款(阿里云),这是他们能给你的保障。如果贸然选择了不知名的小公司,过几天人都找不到了,上哪投诉维权去。从这个角度来说,大品牌试错成本相对更低一些。

当然,找熟人帮忙推荐也是一种比较稳妥的方式,但前提是这个熟人首先得靠谱,不能拿了别人回扣再帮你推荐。其次,即便有熟人推荐,自己也要去深入了解,不能指望熟人帮你操办所有事情,因为最终做决策的是你。再者,熟人推荐的建站公司不一定就适合你们,比如你们是一家中小企业,而熟人所在的公司恰恰是一家大型企业,这种情况下就不是很适合了,因为每个建站公司服务的目标客户群体相对还是比较明确和固定的,不可能对每一种类型都擅长。

其次需要警惕的是,那些声称提供免费建站服务的公司不能选,免费只是他们的噱头,真正的目的不会告诉你的。建站行业发展至今,其实已经很饱和了,并且竞争惨烈,于是一些公司为了获客开始动起了歪脑筋。其实只要稍微多想一下就会发现这个免费并不靠谱,公司开发软件、养运维人员都需要成本,给你免费了企业还怎么赚钱?只能是羊毛出在羊身上,营销的时候说是免费,可是等你上钩了以后,网站想绑定域名,掏钱!网站想商用,掏钱!总之,会给你安排的明明白白,你以为的免费不真的是免费。就算不收你钱,把你的官网建在人家的平台上,数据存储在人家那里,你能放心?时不时给你搞个网站黑客攻击、被劫持、篡改,就问你怕不怕?你想不付钱都难。

最后需要注意的是,如果时间允许的情况下,多去看看这些建站公司有哪些具体的客户合作案例,就是他们给哪些企业做过官网,去做个简单的市场调研。如果他们以往合作的案例中多以知名企业为主,或者为你认为还不错的企业做过官网,这种一般就没什么问题,毕竟有那么多合作企业在那里背书,至少产品和服务得到过市场验证。另外如果说还有什么建议的话,那就是选择最适合自己的建站公司,各家都有其擅长,有的主做大客户(给大型企业做官网),有的在中小型企业客户那里口碑不错,有的擅长做定制化(费用会比较贵),具体选择哪家还是看自身需求以及预算等。

文章

存储 · 运维 · 安全 · 搜索推荐 · 视频直播 · 5G · UED

2020-07-03

阿里云宣布合并优酷CDN业务降价35%击穿行业底线

3月29日,在云栖大会·深圳峰会上,阿里云宣布完成对优酷CDN及视频云业务和团队的整合。

合并后的阿里云CDN整体带宽能力超过40T,全球节点超过1000个,业务规模跃居中国第一,与全球巨头Akamai旗鼓相当。

“未来90%以上的互联网流量来自视频。今天我们很高兴看到,由于阿里云等云服务提供商的入场,市场已经发生了很大的变化,接下来的变化将更加猛烈。这些变化将极大推动视频行业的发展。”阿里云视频云总经理朱照远宣布CDN开始新一轮的大幅降价。

此次阿里云CDN官网降价降幅最高可达35%,流量单价最低只需0.17元/GB。此外,带宽计费规则从原来的超额累进调整为阶梯到达,更加有利于消费者。

会上,阿里云还发布了整合优酷资源后的全新视频云解决方案,全面覆盖金融、电商、医疗、教育等诸多领域,一站式提供海量存储、高效分发、极速网络、视频AI等强大服务,广泛适用于短视频、游戏直播、娱乐直播、泛生活直播、教育直播、远程医疗、企业远程视频会议等场景。

2015年5月,阿里云曾宣布CDN降价21%,调整后的价格对比传统CDN厂商价格接近“腰斩”,引发市场激烈反应。

目前,阿里云CDN服务了超过20万家企业客户,包括人民网、映客、CNTV、芒果TV、今日头条、新浪微博、知乎、豆瓣、熊猫TV、PPTV等。

文章

新零售 · CDN

2017-03-29

分享几本 O'Reilly 出品的免费电子书

有一些书,如果你不是行内人士,那么可能你一辈子都不会看。有一些出版社,就是专门做这种书,比如国内的机工华章,比如国外的 O'Reilly,都是专注计算机和软件行业二十年的好出版社。

这两家出版社的书,都是颇有特色个性鲜明。华章的图书,我在大学期间读了很多,以计算机科学领域的基础和经典居多,这套书在民间诨号「黑皮书」,官方的称谓好像是「计算机科学丛书」。O'Reilly 的图书则诨号「动物书」,因为图书的封面是各种各样的动物,有些动物是技术的吉祥物,比如 Python 书籍的封面是各种各样的蟒蛇,Golang 书籍的封面则是地鼠。至于 Perl,似乎还 O'Reilly 先在 Programming Perl 这本书的封面上画了骆驼,然后骆驼才成了 Perl 的吉祥物。

Careers

目前我所在的技术团队是「阿里云?云数据库?服务团队」,我们正在寻找优秀的资深工程师以及技术专家。如果你有数据库、云计算等方面的工作经验,或者在 Python、Java 等语言上有一定的造诣,而且愿意在云数据库平台领域做点事情,那么,我很期待你的?来信!

当然,O'Reilly 出的最接地气的一本书,当属下面这本(误

回到正题。前几天我终于用排队打饭、吃饭、上厕所等等碎片时间,看完了大半年之前就保存在手机中的一本电子书,Software Architecture Patterns。

这本书内容挺好,介绍了几种常见的架构模式,比如泥球、事件驱动、插件化,还有时下火热的微服务、云架构等等,详细解释各种架构的设计,为了解决什么问题,做了哪些折衷,有哪些缺陷,还定性地描述可部署性、可测试性、敏捷度等等关键指标。

之前发现这本电子书纯属偶然,最近我养成了个习惯,不管是看过的书还是电影还是动漫,只要是觉得不错的,都在?Favorite?记录下来。这些文艺作品大多数都能在豆瓣找到相关页面,而这次我看的是电子书,豆瓣里也没人分享,我也懒得去提交申请。

于是我顺藤摸瓜找到 O'Reilly 官网上关于这本书的页面,然后再次顺藤摸瓜找到 O'Reilly 分享的其他免费编程类电子书,Free Programming Reports。页面下方还有其他主题的免费电子书,商业的,数据的,物联网的……简直就像是一个吃货走进了摆满各种各样 delicious free food 的房间,幸福来得太突然。

看到美好的东西,总是忍不住占为己有,看到有用的互联网资源,总是忍不住下载到本地,这叫做落袋为安。

可是,那么多本电子书,难道要我一个一个点开下载吗?

子曰,举一隅,不以三隅反,则不复也。如果点开一个两个下载之后还没找到捷径,那么真的没必要看这些书了。

这里就把下载 O'Reilly 免费电子书的捷径随便分享一下,希望读者看到的时候,这个捷径依旧有效。

万一失效了,请留言告知后来人,别留言请求我跟进修改就好,哈哈。

$.map($('body > article:nth-child(4) > div > section > div > a'), function(e){return e.href.replace(/free/, "free/files").replace(/csp.*/, "pdf")})

在页面上上启动检查元素,然后在终端中执行上面这个表达式,我们得到的就是当前页面展示的图书的下载地址了。有了下载地址,无论是扔给 wget 一个一个慢慢下载,还是扔给 axel 多线程并发下载,都是很轻松随意的嘛~

祝阅读愉快!

文章

数据库 · Perl

2016-04-30

利用setuptools发布Python程序到PyPI,为Python添砖加瓦

pip install的东西从哪里来的?

从PyPI (Python Package Index)来的,官网是: https://pypi.python.org/pypi/执行pip install terminaltranslator命令的时候,它就会去从官方网站搜terminaltranslator,搜到了就下载压缩包并解压安装,如果没有搜索到就会报错。

众所周知的原因,国内访问国外网站总是不那么顺畅,于是就有了PyPI镜像,国内有很多,我用过阿里云的,中科大的,豆瓣的。阿里云的同步的好像不够及时,中科大的好像很及时,所以我就用中科大的。那么,该怎么用这些镜像呢?

方法1: 给pip加参数-i 后面跟镜像的url,但是要记住并每次都写这个url可是一件难事。方法2: 编写配置文件~/.pip/pip.conf:

[global]

index-url=https://mirrors.ustc.edu.cn/pypi/web/simple

如何把你自己的Python程序发布到PyPI上面去?

首先去官网注册你的账号,不能师出无名总得留下你的大名嘛。注册地址:https://pypi.python.org/pypi?%3Aaction=register_form

注册好后编写你的配置文件~/.pypirc

[distutils]

index-servers=pypi

pypitest

[pypi]

repository=https://pypi.python.org/pypi

username=Your-Account

password=Your-Password

[pypitest]

repository=https://testpypi.python.org/pypi

username=Your-Account

password=Your-Password

这里配置了两个地址,一个是PyPI Live,是正式发布Python包的;另一个是PytPI Test 是用来正式发布之前验证你的包是否正常。

准备好你的Python包

通常你的代码目录结构如下:

root-dir/ # 你的代码的根目录

setup.py

setup.cfg

LICENSE.txt

README.md

mypackage/

__init__.py

foo.py

bar.py

baz.py

其中的setup.py就是安装包的文件,格式如下:

from distutils.core import setup

setup(

name='mypackage',

packages=['mypackage'], # 跟上面代码目录下面的包名一致

version='0.1',

description='A setup test package',

author='veelion',

author_email='veelion@gmail.com',

url='https://github.com/veelion/mypackage', # 指向 github 仓库的URL

keywords=['testing', 'logging', 'example'], # 一些关键词

classifiers=[],

)

setup可以从两个包里面调来使用,一个是上面用的distutils,另外一个是setuptools,如:

from setuptools import setup

这两个包功能基本一样,而setuptools支持wheel(未来包管理的趋势),所以一般用setuptools更好一些。再多说两句wheel,它是用来准备替换老的egg的,其中很好的一个优点是“二进制格式发布”,当包内含有C/C++写的扩展的时候可以把.so/.dll等二进制库打包进去,实现“一次编译,到处使用”的目标。省的用户编译时需要解决一堆依赖问题。

但是setuptools好像是不支持单文件包,即你的包只是一个.py文件而非上面说的是一个带__init__.py我目录。而distutils通过py_modules可以指定当个文件作为包。

上面说的是用setup.py管理Python包让其他人import用,而非在命令行下指向。

而terminaltranslator 是一个命令行工具,可以在setup.py里面不指定package而是指定scripts来把相关文件安装到bin目录下:

if __name__=="__main__":

from setuptools import setup

setup(

name='TerminalTranslator',

version='0.8',

author="Veelion chong",

author_email="veelion@gmail.com",

license='MIT',

url='https://github.com/veelion/tt',

description=("Linux terminal translating tool implemented in Python"),

scripts=['t', 'tt', 'terminaltranslator.py'],

)

这里还用到一个小tip,把terminaltranslator.py 链接为t和tt两个别名,这样命令行下使用起来更方便。 不过,好像Windows下不支持Linux的软链接,t和tt可能在Windows下出问题

发布到PyPI

首先,打包生成压缩包

python setup.py sdist

python setup.py bdist_wheel (distutils不支持这个wheel选项)

上传到PyPI:

python setup.py register #注册你的包,如果出现与已有包重名则报错python setup.py upload更新:在python3下面,python setup.py upload 已经无效,官方推荐用 twine 上传到pypi。

或者可以用twine (无需register,直接upload)

twine register dist/xxx.gz

twine register dist/xxx.whl

twine upload dist/*

文章来源于:猿人学网站的python教程。版权申明:若没有特殊说明,文章皆是猿人学原创,没有猿人学授权,请勿以任何形式转载。

文章

Python · Linux · Windows · C++

2019-05-08

Shiro系列(1) - 权限管理的介绍与原理

1. 什么是权限管理

? 一般来说,只要有用户参与,那么该系统都会需要权限管理,权限管理实现了对用户访问系统 ?指定功能的限制,按照管理员定义的安全规则或权限策略,限制用户只能访问自己被授权的那些资源路径。

? 权限管理包括用户认证和授权两部分(俗称登录和鉴权)。也就是说先要进行用户的登录,登录以后会对用户访问的功能模块(即:访问资源的url路径)进行权限验证。

?

2. 用户认证(用户登录)

? 身份认证,简单来说就是登录。检验一个用户是否为合法用户的业务处理过程。最常见的方式为系统对用户输入的用户名和密码判断是否匹配数据库中的记录。

? 除此之外还有指纹认证,一卡通认证,脸部扫描,这些都需要硬件设备,比如指纹采集仪,pose机,刷脸(脸部识别系统/iphoneX)等。

?

3. 登录认证流程

流程中的出现主要对象:

Subject:主体,大部分情况下就是用户,但也可以是api接口(rest服务,手机端访问等),去访问系统的功能,系统需要对Subject进行身份认证。

Principal:身份信息,一般来说是唯一的,一个主体可以有多个身份,但是都有一个主身份信息(primary principal)。主要体现在账户系统和子账户。

Credential:凭证token,可以是密码 、证书、指纹、人脸等。

总结一句话:主体用户在进行身份认证时需要提供身份信息和凭证信息。简单来说就是登录。

?

?

?

4.?用户授权(验证用户是否拥有访问的权限)

? 授权,即访问控制,控制用户能否访问哪些资源。在用户进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的

?

流程中的出现主要对象:

Subject:主体,此时的主体已经经过登录之后认证过了的。

Resource:主体用户所访问的资源或者功能。比如用户要删除一个员工记录,这个员工记录在数据库中的主键pid为1001,那么这个资源就是1001这条在数据库中所对应的记录。在java中就是一个对象。或者查询所有员工的页面,这些员工所在数据库中的数据集也是这个资源resource。

Permission:凭证token,可以是密码 、证书、指纹、人脸等。

总结一句话:[主体用户] 对 [资源] 进行 [增删改查] 的操作

?

?

<未完待续...>

具体内容同步更新文章以及视频到公众号,知乎,豆瓣,cnblogs以及新浪微博,以官网itzixi.com为主

?

文章

数据库 · 数据安全/隐私保护 · 网络架构 · Java · 安全 · API

2017-10-19

Vitamio FAQ(2012-11-20 )

一、Vitamio介绍

1.1 Vitamio是什么?

Vitamio是Android平台视音频播放组件,支持播放几乎格式的视频以及主流网络视频流(http/rtsp/mms等),详细的中文介绍:?这里。

Vitamio官网:http://vitamio.org/

Vitamio微博:http://weibo.com/vitamio

VPlayer官网:http://vplayer.net?

Vitamio豆瓣:http://site.douban.com/145815/?

?

1.2 关于Vitamio的名字(摘自豆瓣官网)

Vitamio 来源于英文单词Vitamin(维他命),希望Vitamio对于安卓多媒体开发者的重要性,就像Vitmain之于人体一样不可缺少。 ?

The name of Vitamio comes from Vitamin, We hope the importance of Vitamio for Android multimedia developers as indispensable as Vitamin for human.

?

1.3 关于Vitamio的由来(摘自豆瓣官网)

我们是一拨葱名勤劳的Coder,我们憎恶烦冗的Android多媒体程序开发,从版本升级到不同设 备,刚坑娘的测试完三星,htc,sony,操,又拿来了v880;我们认为这些讨厌的玩意注定会让我们的生活变得愚蠢,新技术神马的也是没有时间去研究 ,最令人发指的是不能专注于实现自己的创意APP。

经常沉溺于拯救世界的精神世界,平凡的Coder也能变奇葩。 作为最早研究Android媒体工具的团队,我们决定把我们的Vitamio框架免费出去,助力安卓多媒体开发者实现自己的创意梦想 :D 各位少年,我们是来自中国的高品质多媒体框架噢。?

第一版发布日期:2011年9月发布

?

1.4 Vitamio相关数据

从2011年9月发布至今,用户下载量超过2000W,使用Vitamio的开发者超过1500位,使用过Vitamio产品有

国内:搜狐视频,91熊猫影音(网龙),海底捞,歌华有限 等 国外:Pak TV Global,Madani Channel,Deen TV,myTRANS,FPlayer,AnimeFTW.tv,Radio Nepali,GNC LiveWell,MagicTV Streaming Player Free,Hispan TV Mobile,TV Italy等?

?

1.5 Vitamio有什么优点?

a). 强大。支持超多格式视频和网络视频播放。(不强大免费也没用,所以排在第一位)

b). 个人免费。(但企业使用需要购买授权)

(Google Play上已有多款基于Vitamio的收费播放器,大家可以在里面搜索Vitamio关键字)

c). 无缝集成。仅将Vitamio的Library工程引入即可使用,无需另外下载安装解码包(Vitamio的上一个版本是需要单独下载安装解码包)。

d). 使用简单。调用非常简单,方便使用。

e). 自由定制。播放界面的代码已完全开放,方便自定义播放界面、进度条等。

d). 持续更新。2012-7-9已发布新一版的内测版本,预计8月初能发布下一个版本。

e). 服务跟进。Vitamio官方QQ群(171570336),提供开发者交流和讨论。论坛还在开发中。

?

1.6 Vitamio背后的团队

Vitamio与VPlayer属同一个团队、同一个公司(yixia.com)。我们在北京,目前团队有5名成员,4名开发,1名设计师,以开发VPlayer为主,Vitamio为辅 :)

?

1.7 Vitamio与VPlayer什么关系??

VPlayer基于Vitamio开发,所以VPlayer能播放的Vitamio也能。?

OPlayer基于Vitamio开发,作为推广Vitamio的使用例子和示范产品,完全开放源代码。虽是业余之作,仍以正式发布到市场为目标。

?

1.8 Vitamio与ffmpeg

FFmpeg提供软件解码器和多路输出(demuxers)。Vitamio使用LGPLv2.1许可下FFmpeg的代码,代码可以从这里下载。

https://bitbucket.org/ABitNo/ffmpegandroid?

?

二、Vitamio下载和运行

2.1 下载

Vitamio 3.0下载。(2012-10-23更新)?

OPlayer 3.0下载。(2012-10-24更新,没有taocode账户的请注册一个)?

?

2.2 运行例子

解压后两个项目:VitamioBundle和Test,其中VitamioBundle是Library(关于Android Library参见这里),运行Test例子即可。注意:

1). 例子使用API 16,没有安装升级最新Android 4.1 会报错,大家设置里降低至API 14(Android 4.0) 或API 15(Android 4.0.3) 即可。

2). 工程文件并没有gen文件夹,请大家自行加上。

3). 先编译VitamioBundle,后编译Test。如果仍然有错误,把工程Clean一下,依次再编译一下。

4). 修改VideoViewDemo视频路径为你要测试的视频路径。注意,本地视频用setVideoPath方法,播放网络视频用setVideoURI方法。

?

2.3 整合例子?

不希望以Library的方式引用Vitamio,可以直接把VitamioBundle里所有的类、资源拷贝至目标项目。注意src、libs、res目录下的都要拷贝过去,还有AndroidManifest.xml中的配置。

成功整合例子,大家可以看一下OPlayer的结构。

?

2.4 自定义InitActiviy,即正在解压解码包进度条界面。

? 这里给出InitActivity代码:?

public?class?InitActivity?extends?Activity?{

public?static?final?String?FROM_ME?=?"fromVitamioInitActivity";

public?static?final?String?EXTRA_MSG?=?"EXTRA_MSG";

public?static?final?String?EXTRA_FILE?=?"EXTRA_FILE";

private?ProgressDialog?mPD;

protected?void?onCreate(Bundle?savedInstanceState)?{

super.onCreate(savedInstanceState);

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

new?AsyncTask()?{

protected?void?onPreExecute()?{

mPD?=?new?ProgressDialog(InitActivity.this);

mPD.setCancelable(false);

mPD.setMessage(getString(getIntent().getIntExtra(EXTRA_MSG,?R.string.vitamio_init_decoders)));

mPD.show();

}

@Override

protected?Object?doInBackground(Object...?params)?{

VitamioConnection.initNativeLibs(getApplicationContext(),?getIntent().getIntExtra(EXTRA_FILE,?R.raw.libarm),?new?VitamioConnection.OnNativeLibsInitedListener()?{

@Override

public?void?onNativeLibsInitCompleted(String?libPath)?{

Log.d("Native?libs?inited?at?"?+?libPath);

uiHandler.sendEmptyMessage(0);

}

});

return?null;

}

}.execute();

}

private?Handler?uiHandler?=?new?Handler()?{

public?void?handleMessage(Message?msg)?{

mPD.dismiss();

Intent?src?=?getIntent();

Intent?i?=?new?Intent();

i.setClassName(src.getStringExtra("package"),?src.getStringExtra("className"));

i.setData(src.getData());

i.putExtras(src);

i.putExtra(FROM_ME,?true);

startActivity(i);

finish();

}

};

}

? 代码说明:

主要是VitamioConnection.initNativeLibs,大家自己写一个初始化的界面即可,线程里调用这个代码即可。?

?

三、Vitamio问题汇总

3.1 官网怎么打不开?

由于vplayer.net、vov.io等几个网站都是我们部门自己维护的,目前就一人再改,出点问题来不及弄,你懂的。?

?

3.2 ?case : 为什么一直停在正在解码的解码?

?case :?Couldn't load vinit: findLibrary returned null?

?case :?Not allowed to bind to service Intent (act=io.vov.vitmio.IVitamioService)?

?case :?io.vov.vitmio.VitamioInstaller$VitamioNotFoundException?

?case :?java.lang.UnsatisfiedLinkError: Library /data/data/null/libs/libvplaer.so not found?

?defalut : //各种运行不了的问题

return?基本就一个问题,2012-7-9发布的Vitamio测试版本无法共存的问题。无法与VPlayer共存、无法与其他Vitamio共存,需要卸载干净了。注意改一下包名(package)就是一个新的APK,需要把之前的卸载掉。

?

3.3 视频/视频流(rtp、rtsp等)播放不了。?

可能存在以下几种情况:

a). 视频本身就存在问题,你可以用其他播放器播放一下,是否能正常播放。

b). 本地网速不给力/设备本事配置过低,这个没办法

c). 视频源卡,本事带宽不够,直接访问也很慢,这个也没办法

d). 用VPlayer与Vitamio同样都有问题,而其他播放器没事,这个可能是我们的问题,我们还在持续改进,尤其是播在线视频这部分,这个可以等新版发布 :)

e). 等不及了,那就把视频测试地址和简要说明发给我们(vplayer@yixia.com),我们尽可能的抽时间来回复,感谢!?

?

3.4 Vitamio最低支持的Android版本

目前我们在运行的项目最低支持Android 2.1,示例工程选的Android API Level 是4.1,但不代表只支持4.0以上,大家可从AndroidManifest.xml中看得出:

如果编译无法运行的话,把VitamioBundle项目下res/values-v11和values-v14删掉即可,其他部分稍作改动即可。?

?

3.5 为什么会弹出提示框要求安装Vitamio Plugin

因为你下载和使用的是旧版的Vitamio,请卸载干净后下载2012-7-9日发布的版本,请看本文 2.1 下载。?

?

3.6 是否支持硬解码?

目前支持硬解码这部分不是很成熟,也不稳定,暂时不提供。?

?

3.7 什么时候发布新版本?

诶,,,请关注我们官方微博(http://weibo.com/vitamio?)!!目前集中精力再弄VPlayer,新版顺利上线后应该能加快Vitamio的发布速度,所以大家可以先用VPlayer来测试。

?

3.8 E/Vitamio(1557): java.io.FileNotFoundException: No content provider:?(2012-8-6) 这个不是错误,是正常的处理。现在播放视频是这样做的:先把 URL 当做一个 ContentProvider 来打开,如果打不开,就直接当做 URL 来打开

?

3.9 Vitamio支持哪些指令集的CPU?(2012-09-07)

ARMv6、ARMv6 VFP、ARMv7 VFPV3、ARMv7 NEON(注意:2012-8-31发布的版本不支持ARMv6的CPU,VPlayer已经不支持,但下次发版Vitamio会加上)

?

3.10 播放网络视频突然中断的问题

可能是视频网站做了限制,加入了一些不能播的地址,目前Vitamio的处理是播不了就直接关闭了,后续版本会改进,直接跳过。

?

3.11 拖动进度条出现回帧现象(本地播放,比如,拖到到1:20,但是播放时,跳到1:15)?【2012-11-20 新增】

这是正常现象,不是播放器的问题。默认seek要到最近的关键帧,不能保证任何时间点上都有关键帧 。除非你是intra-only 的编码方式 。(——来自GoogleGeek)

四、已知问题和注意事项(新版指2012-8-31发布的版本)

4.1 混淆工程时注意,需要忽略vitamio里面的类库!(2012-8-1 update)?

-keep?class?io.vov.utils.**?{?*;?} -keep?class?io.vov.vitamio.**?{?*;?}

?

4.2 ?不能在包含项目里面使用io.vov.vitamio.provider.MediaProvider

否则如果安装了VPlayer,会报冲突的错误无法安装。也就是说,可以直接使用VPlayer的MediaProvider,或者自己写扫描服务,但是名字不能相同。?

?

五、其他

5.1 调用VPlayer来播放视频的代码:?

private?void?startPlayer(String?url,?String?title)?{ Intent?i?=?new?Intent(); i.setComponent(new?ComponentName("me.abitno.vplayer.t",?"me.abitno.vplayer.VideoActivity")); i.setAction("me.abitno.vplayer.action.VIEW"); i.setData(Uri.parse(url)); i.putExtra("displayName",?title); startActivity(i);

}

转载:http://www.cnblogs.com/over140/archive/2012/08/01/2611323.html

文章

API · Android开发 · 开发者 · 流计算

2016-05-24

Python并发编程协程(Coroutine)之Gevent

Gevent官网文档地址:http://www.gevent.org/contents.html

基本概念

我们通常所说的协程Coroutine其实是corporate routine的缩写,直接翻译为协同的例程,一般我们都简称为协程。

在linux系统中,线程就是轻量级的进程,而我们通常也把协程称为轻量级的线程即微线程。

进程和协程

下面对比一下进程和协程的相同点和不同点:

相同点:我们都可以把他们看做是一种执行流,执行流可以挂起,并且后面可以在你挂起的地方恢复执行,这实际上都可以看做是continuation,关于这个我们可以通过在linux上运行一个hello程序来理解:

shell进程和hello进程:

开始,shell进程在运行,等待命令行的输入

执行hello程序,shell通过系统调用来执行我们的请求,这个时候系统调用会讲控制权传递给操作系统。操作系统保存shell进程的上下文,创建一个hello进程以及其上下文并将控制权给新的hello进程。

hello进程终止后,操作系统恢复shell进程的上下文,并将控制权传回给shell进程

shell进程继续等待下个命令的输入

当我们挂起一个执行流的时,我们要保存的东西:

栈, 其实在你切换前你的局部变量,以及要函数的调用都需要保存,否则都无法恢复

寄存器状态,这个其实用于当你的执行流恢复后要做什么

而寄存器和栈的结合就可以理解为上下文,上下文切换的理解:CPU看上去像是在并发的执行多个进程,这是通过处理器在进程之间切换来实现的,操作系统实现这种交错执行的机制称为上下文切换

操作系统保持跟踪进程运行所需的所有状态信息。这种状态,就是上下文。在任何一个时刻,操作系统都只能执行一个进程代码,当操作系统决定把控制权从当前进程转移到某个新进程时,就会进行上下文切换,即保存当前进程的上下文,恢复新进程的上下文,然后将控制权传递到新进程,新进程就会从它上次停止的地方开始。

不同点:

执行流的调度者不同,进程是内核调度,而协程是在用户态调度,也就是说进程的上下文是在内核态保存恢复的,而协程是在用户态保存恢复的,很显然用户态的代价更低

进程会被强占,而协程不会,也就是说协程如果不主动让出CPU,那么其他的协程,就没有执行的机会。

对内存的占用不同,实际上协程可以只需要4K的栈就足够了,而进程占用的内存要大的多

从操作系统的角度讲,多协程的程序是单进程,单协程

线程和协程

既然我们上面也说了,协程也被称为微线程,下面对比一下协程和线程:

线程之间需要上下文切换成本相对协程来说是比较高的,尤其在开启线程较多时,但协程的切换成本非常低。

同样的线程的切换更多的是靠操作系统来控制,而协程的执行由我们自己控制

我们通过下面的图更容易理解:

从上图可以看出,协程只是在单一的线程里不同的协程之间切换,其实和线程很像,线程是在一个进程下,不同的线程之间做切换,这也可能是协程称为微线程的原因吧

继续分析协程:

Gevent

Gevent是一种基于协程的Python网络库,它用到Greenlet提供的,封装了libevent事件循环的高层同步API。它让开发者在不改变编程习惯的同时,用同步的方式写异步I/O的代码。

使用Gevent的性能确实要比用传统的线程高,甚至高很多。但这里不得不说它的一个坑:

Monkey-patching,我们都叫猴子补丁,因为如果使用了这个补丁,Gevent直接修改标准库里面大部分的阻塞式系统调用,包括socket、ssl、threading和 select等模块,而变为协作式运行。但是我们无法保证你在复杂的生产环境中有哪些地方使用这些标准库会由于打了补丁而出现奇怪的问题

第三方库支持。得确保项目中用到其他用到的网络库也必须使用纯Python或者明确说明支持Gevent

既然Gevent用的是Greenlet,我们通过下图来理解greenlet:

每个协程都有一个parent,最顶层的协程就是man thread或者是当前的线程,每个协程遇到IO的时候就把控制权交给最顶层的协程,它会看那个协程的IO event已经完成,就将控制权给它。

下面是greenlet一个例子

1 from greenlet import greenlet

2

3 def test1(x,y):

4 z=gr2.switch(x+y)

5 print(z)

6

7

8 def test2(u):

9 print(u)

10 gr1.switch(42)

11

12

13 gr1=greenlet(test1)

14 gr2=greenlet(test2)

15

16

17 gr1.switch("hello",'world')

greenlet(run=None, parent=None): 创建一个greenlet实例.gr.parent:每一个协程都有一个父协程,当前协程结束后会回到父协程中执行,该 属性默认是创建该协程的协程.gr.run: 该属性是协程实际运行的代码. run方法结束了,那么该协程也就结束了.gr.switch(*args, **kwargs): 切换到gr协程.gr.throw(): 切换到gr协程,接着抛出一个异常.

下面是gevent的一个例子:

1 import gevent

2

3 def func1():

4 print("start func1")

5 gevent.sleep(1)

6 print("end func1")

7

8

9 def func2():

10 print("start func2")

11 gevent.sleep(1)

12 print("end func2")

13

14 gevent.joinall(

15 [

16 gevent.spawn(func1),

17 gevent.spawn(func2)

18 ]

19 )

关于gevent中队列的使用

gevent中也有自己的队列,但是有一个场景我用的过程中发现一个问题,就是如果我在协程中通过这个q来传递数据,如果对了是空的时候,从队列获取数据的那个协程就会被切换到另外一个协程中,这个协程用于往队列里put放入数据,问题就出在,gevent不认为这个放入数据为IO操作,并不会切换到上一个协程中,会把这个协程的任务完成后在切换到另外一个协程。我原本想要实现的效果是往对了放入数据后就会切换到get的那个协程。(或许我这里理解有问题)下面是测试代码:

1 import gevent

2 from gevent.queue import Queue

3

4

5 def func():

6 for i in range(10):

7

8 print("int the func")

9 q.put("test")

10

11 def func2():

12 for i in range(10):

13 print("int the func2")

14 res=q.get()

15 print("--->",res)

16

17 q=Queue()

18 gevent.joinall(

19 [

20 gevent.spawn(func2),

21 gevent.spawn(func),

22 ]

23 )

这段代码的运行效果为:

如果我在fun函数的q.put("test")后面添加gevent.sleep(0),就会是如下效果:

原本我预测的在不修改代码的情况下就应该是第二个图的结果,但是实际却是第一个图的结果(这个问题可能是我自己没研究明白,后面继续研究)

关于Gevent的问题

就像我上面说的gevent和第三方库配合使用会有一些问题,可以总结为:python协程的库可以直接monkey path?C写成的库可以采用豆瓣开源的greenify来打patch(这个功能自己准备后面做测试)

不过总的来说gevent目前为止还是有很多缺陷,并且不是官网标准库,而在python3中有一个官网正在做并且在3.6中已经稳定的库asyncio,这也是一个非常具有野心的库,非常建议学习,我也准备后面深入了解所有的努力都值得期许,每一份梦想都应该灌溉!

文章

Shell · 调度 · Python · Linux · API · 开发者 · 网络安全

2017-09-17

Python的安装及配置 | 手把手教你入门Python之九

上一篇:Python的使用场景 | 手把手教你入门Python之八下一篇:编写Python代码 | 手把手教你入门Python之十

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

安装Python

想要进行Python开发,首先需要下载和配置Python解释?。

下载Python

访问Python官网: https://www.python.org/

点击downloads按钮,在下拉框中选择系统类型(windows/Mac OS/Linux等)

选择下载最新版本的Python

安装Python

双击下载好的Python安装包

勾选左下? Add Python 3.7 to PATH 选项,然后选择 Install now 立刻安装Python.

安装完成

测试是否安装成功

点击电脑左下角开始按钮,输入 cmd 进入到windows的命令行模式。

在命令行中输入Python,正确显示Python版本,即表示Python安装成功

如果在命令行中输入python出现如下错误

可能是因为在安装Python的过程中没有勾选 Add Python 3.7 to PATH 选项,此时需要手动对Python进行行配置。

手动配置Python

注意:如果在安装过程中,已经勾选了 Add Python 3.7 to PATH 选项,并且在 cmd 命令模式下输 入 python 指令不报错,就不需要再手动的配置Python.

右键 此电脑 --> 选择 属性

选择高级系统设置 --> 环境变量 -->找到并且双击 Path

双击 Path ,在弹框里点击新建,找到Python的安装目录,把路径添加进去

这里新添加的路径 C:UserschrisAppDataLocalProgramsPythonPython37 是 Python安装好以后, Python.exe 这个可执行文件所在的目录。

pip的使用

pip 是?个现代的,通用的Python包管理工具。提供了对 Python 包的查找、下载、安装、卸载的功能,便于 我们对Python的资源包进行管理。

安装

在安装Python时,会自动下载并且安装pip.

配置

在windows命令行里,输入 pip -V 可以查看pip的版本。

如果在命令行里,运行 pip -V ,出现如下提示:

可能是因为在安装python的过程中未勾选 Add Python 3.7 to PATH 选项,需要手动的配置pip的环境变量。

右键此电脑 --> 环境变量 -->找到并且双击 Path -->在弹窗里点击新建-->找到pip的安装目录,把路径添加进去。

这里新添加的路径

使用pip管理Python包

pip install <包名> 安装指定的包

pip uninstall <包名> 删除指定的包

pip list 显示已经安装的包 p- ip freeze 显示已经安装的包,并且以指定的格式显示

pip install -r required.txt 安装required.txt文件里列出的安装包

修改pip下载源

运行pip install 命令会从网站上下载指定的python包,默认是从 https://files.pythonhosted.org/ 网站上下载。这是个国外的网站,遇到网络情况不好的时候,可能会下载失败,我们可以通过命令,修改pip 现在软件时的源。 格式:pip install 包名 -i 国内源地址

示例: pip install flask -i https://pypi.mirrors.ustc.edu.cn/simple/ 就是从中国科技大学(ustc)的服务?上下载?ask(基于python的第三方web框架) 国内常用的pip下载源列表:

阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

文章

Linux · 开发者 · iOS开发 · MacOS · Python · Windows

2020-06-10

Spark简介及其在ubuntu下的安装使用

Spark概述

Spark 是一种与 Hadoop 相似的开源集群计算环境,在性能和迭代计算上很有看点,现在是Apache孵化的顶级项目吧。Spark 由加州大学伯克利分校 AMP 实验室 (Algorithms, Machines, and People Lab) 开发,可用来构建大型的、低延迟的数据分析应用程序。Spark

启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。Spark 是在 Scala 语言中实现的,它将 Scala 用作其应用程序框架,而Scala的语言特点也铸就了大部分Spark的成功。与 Hadoop 不同,Spark 和 Scala 能够紧密集成,其中的 Scala 可以像操作本地集合对象一样轻松地操作分布式数据集。尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。

虽然 Spark 与 Hadoop 有相似之处,但它提供了具有有用差异的一个新的集群计算框架。首先,Spark 是为集群计算中的特定类型的工作负载而设计,即那些在并行操作之间重用工作数据集(比如机器学习算法)的工作负载。为了优化这些类型的工作负载,Spark 引进了内存集群计算的概念,可在内存集群计算中将数据集缓存在内存中,以缩短访问延迟。

Spark 还引进了名为 弹性分布式数据集 (RDD) 的抽象。RDD 是分布在一组节点中的只读对象集合。这些集合是弹性的,如果数据集一部分丢失,则可以对它们进行重建。重建部分数据集的过程依赖于容错机制,该机制可以维护 “血统”(即充许基于数据衍生过程重建部分数据集的信息)。RDD 被表示为一个 Scala 对象,并且可以从文件中创建它;一个并行化的切片(遍布于节点之间);另一个 RDD 的转换形式;并且最终会彻底改变现有 RDD 的持久性,比如请求缓存在内存中。

Spark 中的应用程序称为驱动程序,这些驱动程序可实现在单一节点上执行的操作或在一组节点上并行执行的操作。与 Hadoop 类似,Spark 支持单节点集群或多节点集群。对于多节点操作,Spark 依赖于 Mesos 集群管理器。Mesos 为分布式应用程序的资源共享和隔离提供了一个有效平台。该设置充许 Spark 与 Hadoop 共存于节点的一个共享池中。

Spark生态环境

是的,类似hadoop有HDFS,Hive,Pig等一套自己的生态环境,Spark也有一套生态环境,而这套蓝图应该也正是AMP实验室正在绘制的。

Spark在整个生态系统中的地位如图所示,他是基于Tachyon的。而对底层的Mesos类似与YARN调度框架,在其上也是可以搭载如Spark,Hadoop等环境。Shark类似Hadoop里的Hive,而其性能好撑比Hive要快成百上千倍,不过hadoop注重的不一定是最快的速度,而是廉价集群上离线批量的计算能力。此外,上图中还有图数据库,Spark Streaming以及machine learning的ML Base。也就是说,Spark这套生态环境把大数据这块领域的数据流计算和交互式计算都包含了,而另外一块批处理计算应该由hadoop占据,同时Spark又是可以同HDFS交互取得里面的数据文件的。还有一天,Spark的迭代,内存运算能力以及交互式计算,都为数据挖掘,机器学习提供了很必要的辅助。综上所述,Spark不容小觑,也正是笔者打算研究他的原因。

国内目前豆瓣有一位牛人,读了Spark源码后用python写了一个Dpark在豆瓣内部使用。性能方面应该不及Spark,因为Scala是模吸收了Erlang这样的天生分布式语言的一些优势,既面向对象又是函数式的,目前我也在熟悉之中。

Spark的开发者中有一位是中国的博士,这是他的微博。

Spark安装使用

我在win7下尝试了下,根本不能开启spark的shell或者run一下example,最终还是在ubuntu上实现了。在Spark的github上你可以得到源码,但是在ubuntu上使用的时候,我是从网上下载了个?spark-0.7.2-prebuilt-hadoop1.tar的包,解压之后,在$SPARK_HOME下执行

https://yq.aliyun.com/zt/123757?sort=/spark-shell就可以开启交互式spark命令环境,这是一个基于scala的环境,有点类似mongodb的cmd环境是V8引擎下的js环境,应该是spark自带的而不需要外部引用SCALA_HOME。

然后你就可以根据官方document里的quick-start进行一些文件读取操作,并对内容进行处理,做mapreduce呀之类的事情。同时,也是可以去读hdfs上的file的

scala> val textFile=sc.textFile("README.md")

scala> textFile.count() // Number of items in this RDD

scala> textFile.first() // First item in this RDD例子不举了。如果要跑例子,需要先下载并引用scala,然后用sbt构建下spark。sbt是scala的构建工具,相当于是java的maven。

下好的scala解压之后,是可以在SCALA_HOME/bin下执行scala进入scala命令环境的。完成构建之后(我下载的spark解压之后不需要sbt构建也可以直接run这些例子。),就可以跑例子了。

sbt/sbt package

构建之后。还需要先在$SPARK_HOME/conf/ 下修改那个spark-env.sh,在文件内添加一行"SCALA_HOME=xxx"。

https://yq.aliyun.com/zt/123757?sort=/run spark.examples.SparkPi local在跑这个例子的时候,可能输出结果会有一个NULL什么的错误,原因在于run这个文件里写的匹配example的路径是xxx-example-xxx.jar,而在SPARK_HOME/example/target/scalaxxxx路径下的jar包是xxx-example_xxx.jar的格式,问题出在"-"和"_"上。我手动改了下jar包的名字,你也可以在run的144-146行里把那个匹配规则改一下,很简单的。

做了以上的事后,就可以慢慢试玩和探索Spark啦。当然这是本地一个standalone的部署,还可以加master和slave的集群部署。略了。

SparkPi这个例子的代码就不具体说了,下面我提供一些有帮助的文档链接,有助于spark的起步。就我今天网上google的结果看,好像也没有什么别的文档也可以参考了。基本上也就是我列举的这些,所以你看完这些应该就可以啦。

参考

同一个博客里的几篇:

Spark安装与学习

centOS上安装spark集群

淘宝博客里的几篇:

Spark随谈-翻译指南

Spark随谈-整体架构

Spark随谈-安装攻略

官网文档:

quick-start

programming-guide

IBM的一篇介绍

(全文完)

文章

分布式计算 · Ubuntu · Hadoop · Scala · Spark

2013-08-11