基本上有两种方法可以将Python控制台脚本安装到我的路径中setup.py:
setup(
...
entry_points = {
'console_scripts': [
'foo = package.module:func',
],
}
)
Run Code Online (Sandbox Code Playgroud)
和
setup(
...
scripts = [
'scripts/myscript.sh'
]
)
Run Code Online (Sandbox Code Playgroud)
有什么区别?我看到第一种方法允许我为我的脚本选择不错的特定名称,但是还有其他差异吗?不同的原始用途,兼容性(setuptools,distutils,......?),用法,......?我很困惑,一个精心设计的回复可以帮助我(也可能还有其他人)正确理解这一切.
我想从 Python中的网页中提取特定类型的信息.让我们说邮政地址.它有数千种形式,但仍然可以辨认出来.由于存在大量表单,因此编写正则表达式甚至是语法之类的东西并使用解析器生成器来解析它可能非常困难.
所以我认为应该采用的方式是机器学习.如果我理解得很好,我应该能够制作一个数据样本,在那里我将指出应该是什么结果,然后我有一些东西可以从中学习如何自己识别结果.这就是我对机器学习的全部了解.也许我可以使用一些自然语言处理,但可能并不多,因为所有的图书馆都使用英语,我需要这个用于捷克语.
问题:
更新:
正如你们所提到的,我应该展示一些我想要脱离网络的数据,这里有一个例子.我对电影放映时间很感兴趣.它们看起来像这样(其中三个):
<div class="Datum" rel="d_0">27. ?ervna – st?eda, 20.00
</div><input class="Datum_cas" id="2012-06-27" readonly=""><a href="index.php?den=0" rel="0" class="Nazev">Zahájení letního kina
</a><div style="display: block;" class="ajax_box d-0">
<span class="ajax_box Orig_nazev">zábava • hudba • film • letní bar
</span>
<span class="Tech_info">Sv?t podle Fagi
</span>
<span class="Popis">Facebooková komiksová Fagi v podání …Run Code Online (Sandbox Code Playgroud) 这是我的Flask-SQLAlchemy声明代码:
from sqlalchemy.ext.associationproxy import association_proxy
from my_flask_project import db
tagging = db.Table('tagging',
db.Column('tag_id', db.Integer, db.ForeignKey('tag.id', ondelete='cascade'), primary_key=True),
db.Column('role_id', db.Integer, db.ForeignKey('role.id', ondelete='cascade'), primary_key=True)
)
class Tag(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(100), unique=True, nullable=False)
def __init__(self, name=None):
self.name = name
@classmethod
def delete_orphans(cls):
for tag in Tag.query.outerjoin(tagging).filter(tagging.c.role_id == None):
db.session.delete(tag)
class Role(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id', ondelete='cascade'))
user = db.relationship('User', backref=db.backref('roles', cascade='all', lazy='dynamic'))
...
tags = db.relationship('Tag', secondary=tagging, cascade='all', backref=db.backref('roles', cascade='all'))
tag_names = association_proxy('tags', 'name')
__table_args__ …Run Code Online (Sandbox Code Playgroud) 我想使用Celery作为我的任务的队列,所以我的网络应用程序可以排队任务,返回响应,同时/某天/任务将处理任务...我建立了一种API,所以我不知道将提供什么样的任务 - 将来,可以有处理HTTP请求的任务,另一个IO,以及CPU消耗任务.关于这一点,我想在进程上运行Celery的工作者,因为这些是Python中的通用类型的并行性.
但是,我也想在我的任务中使用gevent,所以我可以有一个任务产生许多HTTP请求,等等.问题是,当我这样做时:
from gevent import monkey
monkey.patch_all()
Run Code Online (Sandbox Code Playgroud)
芹菜停止工作.它开始,但没有任何任务可以有效排队 - 他们似乎去经纪人,但芹菜工人不收集它们并处理它们.只有开始和等待.如果我删除这些行并执行任务而没有任何gevent和并行化,一切正常.
我想这可能是因为gevent补丁也在线程化.所以我试过了
from gevent import monkey
monkey.patch_all(thread=False)
Run Code Online (Sandbox Code Playgroud)
...但是Celery甚至没有启动,它在没有给出原因的情况下崩溃(启用了日志记录的调试级别).
是否有可能使用Celery来排队任务和gevent在一个任务中做一些事情?怎么样?我做错了什么?
当我需要从声明性ORM多对多关系中删除一个对象时,我应该这样做:
blogpost.tags.remove(tag)
Run Code Online (Sandbox Code Playgroud)
好.如果我需要清除所有这些关系(不仅仅是一个),我该怎么办?典型情况:我想为我的博客帖子设置一个新的标签列表.所以我需要...:
当然,可以有更好的方法来做到这一点.在那种情况下,请告诉我.
我正在尝试使用http://developer.github.com/v3/来检索项目问题.这有效:
curl -u "Littlemaple:mypassword" https://api.github.com/repos/MyClient/project/issues
Run Code Online (Sandbox Code Playgroud)
它返回我客户项目的所有私人问题.但是,我无法找到如何在Python中实现它.我找到的两种方式(例如Python urllib2 Basic Auth Problem)都不起作用,它们返回404或403错误:
def fetch(url, username, password):
"""Wonderful method found on forums which does not work.""""
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, username, password)
urllib2.install_opener(urllib2.build_opener(urllib2.HTTPBasicAuthHandler(passman)))
req = urllib2.Request(url)
f = urllib2.urlopen(req)
return f.read()
Run Code Online (Sandbox Code Playgroud)
...和:
def fetch(url, username, password):
"""Wonderful method found on forums which does not work neither.""""
request = urllib2.Request(url)
base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
request.add_header("Authorization", "Basic %s" % base64string)
return urllib2.urlopen(request).read()
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?提前致谢!
我正在尝试使用我最喜欢的Requests库找到如何使用Facebook Graph API的最简单方法.问题是,我发现的所有示例都是关于获取用户访问令牌,重定向和用户交互.
我只需要应用程序访问令牌.我不处理任何非公共数据,所以我不需要用户交互,因为我的最终应用程序应该是命令行脚本,不需要重定向.
我在这里发现了类似的东西,但它似乎只是优雅的一切.此外,我更喜欢使用请求或请求-OAuth2.或者也许有图书馆?我找到了Requests-Facebook和Facepy(两者都是基于Requests),但是,所有的例子都是重定向等等.Shapepy根本不处理授权,它只接受你的令牌,你可以通过某种方式得到它.
有人可以提供一个简短,明智,有效的例子,如何获得应用程序访问令牌?
有许多方法可以在PHP中保存会话.将它们保存到文件中有一些问题 - 例如,它不是可扩展的解决方案.在PHP中存储会话的最佳方法是什么?我发现很容易将会话保存到SQLite中,这至少比成千上万的文件更紧凑,但似乎没有多少人这样做.为什么?他们不知道它,它们无所谓,或者它不比文件更好?你有memcached,redis的经验吗?我有自己的服务器,我不满意将会话保存到纯粹的简单文件中.
谢谢你的任何建议!
编辑:问题是:什么是PHP的"最佳"会话save_handler,为什么?我对答案很感兴趣,它总结了各种可能性并列出了每种方法的优缺点.我引用了"最佳",因为我知道它取决于应用程序,但我对哪种方法最适合哪种类型的应用程序感兴趣.
我有Python包setup.py.它具有声明的常规依赖项install_requires和声明的开发依赖项tests_require,例如flake8.
我想pip install -e .或正在运行python setup.py test也将安装我的开发依赖项,它们将可用.然而,显然他们不是,我很难设置我的Travis CI构建权.
install:
- "pip install -e ."
script:
- "python setup.py test"
- "flake8"
Run Code Online (Sandbox Code Playgroud)
如上配置的构建将失败,因为flake8将无法找到有效命令.我也尝试flake8从python setup.py test命令(via subprocess)内部调用,但也没有成功.
我也讨厌flake8不能轻易成为python setup.py test命令的组成部分的事实,但这是另一个故事.
我使用标准的SMTPHandler记录器来捕获我的Python异常.有没有办法将异常名称放入邮件主题?它会比使用静态主题好得多,因为Gmail(而不仅仅是Gmail)可以根据主题对对话进行分组,因此可以根据错误类型对其进行分组.
例如,如果50个完全相同的错误发生+ 1个不同,我会在我的收件箱中看到两个对话,而不是包含51个电子邮件的1个组,我可以很容易地忽略单个不同的对话.
另外,有没有办法防止发送仍然相同的错误?E. g.以某种方式定义我自己的功能决定是否要发送电子邮件.该函数将在params中获取一些基本信息,以便它可以决定(例如缓存并查看是否已发送此类问题).
我浏览了文档,但我找不到那样的东西.这似乎很简单.如果SMTPHandler无法做到这一点,那么最好还是简单的替代方案是什么?任何整洁的图书馆?
谢谢!
python ×9
setup.py ×2
sqlalchemy ×2
celery ×1
extract ×1
flask ×1
gevent ×1
github-api ×1
html-parsing ×1
https ×1
logging ×1
many-to-many ×1
memcached ×1
package ×1
php ×1
redis ×1
session ×1
smtp ×1
sqlite ×1
testing ×1
travis-ci ×1
web-scraping ×1