我使用distutils来安装我的python包,使用这个setup.py:
import distutils.core
args = {
'name' : 'plugh',
'version' : '1.0',
'scripts' : [ "scripts/plugh" ],
'packages': [ "plugh" ],
}
d = distutils.core.setup(
**args
)
Run Code Online (Sandbox Code Playgroud)
在linux/mac上,它按预期工作:
% plugh
hello world
%
Run Code Online (Sandbox Code Playgroud)
在Windows上,脚本"plugh"不会运行:
C:\Python25\Scripts>plugh
'plugh' is not recognized as an internal or external command,
operable program or batch file.
C:\Python25\Scripts>
Run Code Online (Sandbox Code Playgroud)
我在http://bugs.python.org/issue7231上发现了错误报告,当你安装python时,\ Scripts目录没有添加到PATH,所以我应用了该票证中描述的解决方法(即添加C:\ Python25\Scripts到路径)
C:\Python25\Scripts>path
PATH=c:\Python25\Scripts;C:\Program Files\Legato\nsr\bin;C:\WINDOWS\system32;C:\
WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\QuickTime\QTSystem\;c:\python2
5;c:\local;C:\WINDOWS\system32\WindowsPowerShell\v1.0
Run Code Online (Sandbox Code Playgroud)
这个东西在Windows上不起作用吗?如果是这样,你究竟应该如何在Windows机器上使用python脚本?
我想我可以检测到Windows,并在列表中添加一个名为"plugh.bat"的附加脚本,其中包含以下内容:
@echo off
c:\python25\python.exec c:\python25\scripts\plugh %1 %2 %3 %4 %5 %6 %7 %8 %9
Run Code Online (Sandbox Code Playgroud)
但这真的是正确答案吗?我会想到,对于windows中包含distutils的所有自定义,会有比这更好的答案.
我正在追随Clojure的喜悦,我对这两个陈述感到困惑
(def very-lazy (-> (iterate #(do (print \.) (inc %)) 1) rest rest rest))
(def less-lazy (-> (iterate #(do (print \.) (inc %)) 1) next next next))
Run Code Online (Sandbox Code Playgroud)
因此,产量是
(println (first very-lazy)) ; .4
(println (first less-lazy)) ; 4
Run Code Online (Sandbox Code Playgroud)
这本书继续解释这一点
抓住使用rest构建的lazy seq中的第一个元素会导致实现预期.但是对于使用next构建的seq也不会发生这种情况,因为它之前已经实现过.使用next会导致lazy seq成为一个不太懒的元素,如果实现成本很高,则可能不需要.
我的问题是为什么"非常懒"会有一个额外的点?我的想法是"打印"将打印其参数时,如果不考虑调用next或rest.
谢谢
Go编译器使用什么类型的推理算法?
我尝试在golang上查找,但我找不到文档.我很想假设它会是Hindley-Milner,但我想肯定
type Friend struct {
name string
age int
}
type Friends struct {
friends []Friend
}
Run Code Online (Sandbox Code Playgroud)
我想制作Friends范围,这意味着,如果我有一个my_friends带有类型的变量Friends,我可以循环使用:
for i, friend := range my_friends {
// bla bla
}
Run Code Online (Sandbox Code Playgroud)
Go有可能吗?
请考虑以下代码:
>>> colprint([
(name, versions[name][0].summary or '')
for name in sorted(versions.keys())
])
Run Code Online (Sandbox Code Playgroud)
这段代码的作用是以字典versions的升序打印字典的元素keys,但由于它value是另一个排序列表,因此只打印其第一个元素的摘要("max").
由于我熟悉letlisp,我将上述内容重写为:
>>> colprint([
(name, package.summary or '')
for name in sorted(versions.keys())
for package in [versions[name][0]]
)]
Run Code Online (Sandbox Code Playgroud)
你认为这违反了Pythonic吗?可以改进吗?
注意:对于好奇,这里colprint定义.
我想让我的Windows计算机在检测到插入了具有特定名称的闪存驱动器(例如"我的驱动器")时运行Python脚本.
我怎样才能做到这一点?
我应该在Windows中使用某种工具还是有办法编写另一个Python脚本,以便在插入闪存驱动器后立即检测到它?(如果脚本在计算机上,我更喜欢它.)
(我是一个编程新手..)
我开始使用Redis了,我遇到了以下问题.
我有一堆对象,让我们说Messages在我的系统中.每次新User连接时,我都会执行以下操作:
INCR一些全局变量,比方说g_message_id,并保存INCR的返回值(当前值g_message_id).
LPUSH将新消息(包括id和实际消息)放入列表中.
其他客户端使用值g_message_id来检查是否有任何新消息要获取.
问题是,一个客户端可以INCR在g_message_id,但没有时间LPUSH的消息的另一个客户端尝试之前,阅读它,假设有一个新的消息.
换句话说,我正在寻找一种方法来相当于在SQL中添加行,并使用自动递增的索引.
备注:
我不能使用列表索引,因为我经常要删除列表的一部分,使其无效.
我现实中的情况有点复杂,这是一个更简单的版本.
目前的解决方案:
我提出的最佳解决方案以及我打算做的是使用WATCH并Transactions尝试自己执行"自动增量".
但这在Redis中是一个常见的用例,我很惊讶它没有现成的答案,所以我担心我做错了什么.
我在我的linux机器上安装了python 2.7,我正在尝试通过crontab安排python脚本.该命令在命令行中运行正常,但是当通过cron运行时,我得到:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site.py", line 553, in <module>
main()
File "/usr/local/lib/python2.7/site.py", line 535, in main
known_paths = addusersitepackages(known_paths)
File "/usr/local/lib/python2.7/site.py", line 268, in addusersitepackages
user_site = getusersitepackages()
File "/usr/local/lib/python2.7/site.py", line 243, in getusersitepackages
user_base = getuserbase() # this will also set USER_BASE
File "/usr/local/lib/python2.7/site.py", line 233, in getuserbase
USER_BASE = get_config_var('userbase')
File "/usr/local/lib/python2.7/sysconfig.py", line 535, in get_config_var
return get_config_vars().get(name)
File "/usr/local/lib/python2.7/sysconfig.py", line 434, in get_config_vars
_init_posix(_CONFIG_VARS)
File "/usr/local/lib/python2.7/sysconfig.py", line 298, in _init_posix
raise IOError(msg)
IOError: …Run Code Online (Sandbox Code Playgroud) 在Django模板中,我想基于某些"条件"将CSS类添加到DIV,例如:
<div class="pkg-buildinfo
{% if v.release.version == pkg.b.release.version %}active{% else %}inactive{% endif %}
{% if v.release.version == project.latest.version %}latest{% else %}notlatest{% endif %}">
Run Code Online (Sandbox Code Playgroud)
(注意这v是一个循环变量;整个过程都在for循环中)
上面根据两个条件添加了CSS类"活动"或"非活动"和"最新"或"非最新".
然而,这很难阅读和冗长.我发现该with语句不支持分配表达式/条件的值(与复杂变量相对),这是一个遗憾.有一个更好的方法吗?