我想制作一个包含一些Cython代码的Python包.我已经很好地运行了Cython代码.但是,现在我想知道如何最好地打包它.
对于大多数只想安装软件包的人来说,我想要包含.cCython创建的文件,并安排setup.py编译它以生成模块.然后用户不需要安装Cython来安装软件包.
但对于谁可能要修改包的人,我也想提供用Cython .pyx文件,并以某种方式也允许setup.py使用用Cython编译它们(因此这些用户将需要安装用Cython).
我应该如何构建包中的文件以满足这两种情况?
在用Cython文档提供了一些指导.但它没有说明如何制作一个单独setup.py处理有/无Cython情况.
我仍然试图掌握如何运行linux或windows shell命令以及在node.js中捕获输出的更好点; 最终,我想做这样的事......
//pseudocode
output = run_command(cmd, args)
Run Code Online (Sandbox Code Playgroud)
重要的是output必须可用于全局范围的变量(或对象).我尝试了以下功能,但出于某种原因,我被undefined打印到控制台......
function run_cmd(cmd, args, cb) {
var spawn = require('child_process').spawn
var child = spawn(cmd, args);
var me = this;
child.stdout.on('data', function(me, data) {
cb(me, data);
});
}
foo = new run_cmd('dir', ['/B'], function (me, data){me.stdout=data;});
console.log(foo.stdout); // yields "undefined" <------
Run Code Online (Sandbox Code Playgroud)
我无法理解代码在上面的位置......这个模型的一个非常简单的原型工作......
function try_this(cmd, cb) {
var me = this;
cb(me, cmd)
}
bar = new try_this('guacamole', function (me, cmd){me.output=cmd;})
console.log(bar.output); // yields "guacamole" <----
Run Code Online (Sandbox Code Playgroud)
有人可以帮助我理解为什么try_this()有效,而run_cmd() …
遵循Doug Hellman的virtualenvwrapper帖子后,我仍然无法启动测试环境.
[mpenning@tsunami ~]$ mkvirtualenv test
-bash: mkvirtualenv: command not found
[mpenning@tsunami ~]$
Run Code Online (Sandbox Code Playgroud)
应该注意的是,我使用WORKON_HOME的不是我的$HOME.我试图寻找/usr/local/bin/virtualenvwrapper.sh如图所示的virtualenvwrapper安装文件,但它不存在.
我正在运行CentOS 6和python 2.6.6,如果这很重要的话.
# File: ~/.bash_profile
# ...
export WORKON_HOME="/opt/virtual_env/"
source "/opt/virtual_env/bin/virtualenvwrapper_bashrc"
Run Code Online (Sandbox Code Playgroud) 我一直在使用SQLITE数据库进行开发,并在POSTGRESQL中生成.我刚用大量数据更新了我的本地数据库,需要将特定的表传输到生产数据库.
基于运行sqlite database .dump > /the/path/to/sqlite-dumpfile.sql,SQLITE以下列格式输出表转储:
BEGIN TRANSACTION;
CREATE TABLE "courses_school" ("id" integer PRIMARY KEY, "department_count" integer NOT NULL DEFAULT 0, "the_id" integer UNIQUE, "school_name" varchar(150), "slug" varchar(50));
INSERT INTO "courses_school" VALUES(1,168,213,'TEST Name A',NULL);
INSERT INTO "courses_school" VALUES(2,0,656,'TEST Name B',NULL);
....
COMMIT;
Run Code Online (Sandbox Code Playgroud)
如何将上述内容转换为可以导入生产服务器的POSTGRESQL兼容转储文件?
我在host1上有一个主仓库,并对host2上的仓库进行了更新.我用hg pushhost编辑了从host2到host1的更改
[mpenning@host2 login]$ hg push ssh://host1//opt/python/login
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试更新或合并时,我得到了
[mpenning@host1 login]$ hg update
abort: outstanding uncommitted merges
[mpenning@host1 login]$ hg merge
abort: outstanding uncommitted merges
[mpenning@host1 login]$
Run Code Online (Sandbox Code Playgroud)
我也尝试过hg pull来自host1,但这也不起作用......
[mpenning@host1 login]$ hg pull ssh://host2//opt/python/login
running ssh host2 'hg -R /opt/python/login serve --stdio'
mpenning@host2's password:
pulling from ssh://host2//opt/python/login
searching for changes
no changes found
[mpenning@host1 login]$ hg merge
abort: outstanding uncommitted merges
[mpenning@host1 login]$
Run Code Online (Sandbox Code Playgroud)
使用来自host2的更改来更新host1上的主存储库需要做什么?
有关host1上的repo的更多信息......
[mpenning@host1 login]$ hg parents
changeset: 27:6d530d533997
user: Mike Pennington <d.pennington@foo.local>
date: Wed …Run Code Online (Sandbox Code Playgroud) 我认为将import语句放在靠近使用它的片段上有助于通过使其依赖关系更加清晰来实现可读性.Python会缓存吗?我应该关心吗?这是一个坏主意吗?
def Process():
import StringIO
file_handle=StringIO.StringIO('hello world')
#do more stuff
for i in xrange(10): Process()
Run Code Online (Sandbox Code Playgroud)
更合理一点:它是用于使用库的神秘位的方法,但是当我将该方法重构为另一个文件时,我没有意识到我错过了外部依赖,直到我遇到运行时错误.
我想用Python打开一个TCP客户端套接字.我是否必须通过所有低级BSD create-socket-handle/connect-socket的东西,或者是否有更简单的单行方式?
我将设计一个服务器,它需要为通过TCP 同时与服务器连接的数百万个客户端提供服务.
服务器和客户端之间的数据流量将很稀疏,因此可以忽略带宽问题.
一个重要的要求是,每当服务器需要向任何客户端发送数据时,它应该使用现有的TCP连接而不是向客户端打开新连接(因为客户端可能位于防火墙后面).
有人知道如何做到这一点,以及需要什么硬件/软件(至少是成本)?
我有一个Python应用程序,它打开一个简单的TCP套接字,与另一个主机上的另一个Python应用程序通信.有时程序会出错或者我会直接杀死它,在任何一种情况下,套接字都可能会在未知时间内保持打开状态.
下次我运行程序时出现此错误:
socket.error: [Errno 98] Address already in use
Run Code Online (Sandbox Code Playgroud)
现在程序总是尝试使用相同的端口,因此它看起来好像仍处于打开状态.我查了一下,我很确定该程序没有在后台运行,但我的地址仍在使用中.
那么,我如何手动(或以其他方式)关闭套接字/地址,以便我的程序可以立即重新使用它?
更新
根据迈克的回答,我查看了socket(7)页面并查看了SO_REUSEADDR:
Run Code Online (Sandbox Code Playgroud)SO_REUSEADDR Indicates that the rules used in validating addresses supplied in a bind(2) call should allow reuse of local addresses. For AF_INET sockets this means that a socket may bind, except when there is an active listening socket bound to the address. When the listen? ing socket is bound to INADDR_ANY with a specific port then it is not possible to bind to this port …
Python的泡菜(我说的是标准的Python 2.5/2.6/2.7)不能腌制锁,文件对象等.
它也不能pickle生成器和lambda表达式(或任何其他匿名代码),因为pickle实际上只存储名称引用.
在锁和依赖于操作系统的功能的情况下,原因为何你不能咸菜他们是明显的,是有道理的.
但为什么你不能发泡?
注:只是为了清楚起见, -我有兴趣的根本原因(或假设和进入该设计决策选择)为什么,而不是"因为它给你一个味酸错误".
我意识到这个问题有点广泛的目标,所以这里有一个经验法则,你是否回答:"如果这些假设被提出,或者允许的发电机的类型在某种程度上受到限制,那么酸洗发电机会再次工作吗?"
python ×6
tcp ×3
networking ×2
bash ×1
centos ×1
cython ×1
database ×1
generator ×1
javascript ×1
linux ×1
mercurial ×1
migration ×1
node.js ×1
packaging ×1
pickle ×1
postgresql ×1
shell ×1
sockets ×1
sqlite ×1
virtualenv ×1