小编The*_*ius的帖子

执行shell进程时设置当前工作目录

我想sbt update在我的源代码中调用,以更新多个sbt项目.在shell中这很容易:

cd /path/to/project && sbt update
Run Code Online (Sandbox Code Playgroud)

但是,如果我scala.sys.process在我的代码中使用它,它将不记得cd因此sbt在错误的目录中调用.像这样的代码:

import scala.sys.process._
("cd /path/to/project" #&& "sbt update").!!
Run Code Online (Sandbox Code Playgroud)

我没有在文档中找到通过控制台设置sbt的项目路径的任何可能性.如果像这样的东西工作会很好:

"sbt -projectPath /path/to/project update".!!
Run Code Online (Sandbox Code Playgroud)

如果这样的事情是可能的,这将为我节省很多麻烦!(特别是它在UNIX和Windows上运行.)

scala process

18
推荐指数
1
解决办法
7510
查看次数

setuptools和pip:最小和完整安装的选择

我们建立了一个依赖于其他库的库.但是有必要(例如,对于服务器批处理)和可选的依赖性(例如,对于具有GUI的客户端).

这样的事情是可能的:

pip install mylib.tar.gz  # automatically downloads and installs with the minimal set of dependencies

pip install mylib.tar.gz  --install-option="complete"  # automatically installs with all dependencies
Run Code Online (Sandbox Code Playgroud)

我找到了extra_require旗帜,但我怎么能告诉pip他们使用它们?该setup.py如下所示:

from setuptools import setup

# ...

# Hard library depencencies:
requires = [
    "numpy>=1.4.1",
    "scipy>=0.7.2",
    "traits>=3.4.0"
]

# Soft library dependencies:
recommended = {
    "mpl": ["matplotlib>=0.99.3"],
    "bn": ["bottleneck>=0.6"]
}

# ...

# Installer parameters:
setup(
    name = "mylib",
    #...
    install_requires = requires,
    extras_require = recommended
)
Run Code Online (Sandbox Code Playgroud)

python pip setuptools

17
推荐指数
2
解决办法
5113
查看次数

Scala的中缀符号与对象+,为什么不可能?

我可以命名这样的对象,但不能调用m:

object + {
  def m (s: String) = println(s)
}
Run Code Online (Sandbox Code Playgroud)

不能打电话+.m("hi"):

<console>:1: error: illegal start of simple expression
       +.m("hi")
Run Code Online (Sandbox Code Playgroud)

也无法呼叫+ m "hi"(首选DSL使用).

object ++它工作正常!它们与(不存在)unary_+方法冲突吗?有可能避免这种情况吗?

scala

10
推荐指数
2
解决办法
453
查看次数

在Scala中嵌入XML(和其他语言?)

我想知道如何实现scala.xml库,Elem从XML中获取-instance.

所以我可以写:

val xml = {
  <myxml>
    Some wired text withoud "'s or code like
    import x
    x.func()
    It's like a normal sting in triple-quotes.
  </myxml>
}

xml.text

String = 
 "
    Some text wired withoud "'s or code like
    import x
    x.func()
    It's like a normal sting in triple-quotes.
  "
Run Code Online (Sandbox Code Playgroud)

看一下源代码并没有给我一些见解,这是如何实现的."XML检测"是一种(硬)scala语言功能还是内部DSL?因为我想建立我自己的东西:

var x = LatexCode {
  \sqrt{\frac{a}{b}}
}

x.toString

"\sqrt{\frac{a}{b}}"
Run Code Online (Sandbox Code Playgroud)

要么

var y = PythonCode {
  >>> import something
  >>> something.func()
}

y.toString
"""import something ...""" …
Run Code Online (Sandbox Code Playgroud)

dsl scala

9
推荐指数
1
解决办法
682
查看次数

Scala变量参数列表可能带有call-by-name吗?

我有一些像这样的代码:

def foo (s: => Any) = println(s)
Run Code Online (Sandbox Code Playgroud)

但是当我想将它转换为具有可变长度的参数列表时,它将不再编译(在Scala 2.10.0-RC2上测试):

def foo (s: => Any*) = println(s)
Run Code Online (Sandbox Code Playgroud)

我必须写什么,它是这样的?

scala

9
推荐指数
2
解决办法
1338
查看次数

pykka - 演员很慢?

我目前正在尝试使用Actor-concurreny(在Python上),因为我想了解更多相关信息.因此我选择了pykka,但是当我测试它时,它比正常功能慢一半.

该守则只是看它是否有效; 它并不意味着优雅.:)

也许我做错了什么?

from pykka.actor import ThreadingActor
import numpy as np

class Adder(ThreadingActor):
    def add_one(self, i):
        l = []
        for j in i:
            l.append(j+1)
        return l

if __name__ == '__main__':
    data = np.random.random(1000000)
    adder = Adder.start().proxy()
    adder.add_one(data)
    adder.stop()
Run Code Online (Sandbox Code Playgroud)

这不会那么快:

time python actor.py

real    0m8.319s
user    0m8.185s
sys     0m0.140s
Run Code Online (Sandbox Code Playgroud)

而现在虚拟'正常'功能:

def foo(i):
    l = []
    for j in i:
        l.append(j+1)
    return l

if __name__ == '__main__':
    data = np.random.random(1000000)
    foo(data)
Run Code Online (Sandbox Code Playgroud)

给出这个结果:

real    0m3.665s
user    0m3.348s
sys …
Run Code Online (Sandbox Code Playgroud)

python actor pykka

7
推荐指数
1
解决办法
3009
查看次数

Scala,使用通用特征扩展对象

我正在使用Scala,我想扩展一个具有特征的(单例)对象,它提供了一个数据结构和一些方法,如下所示:

trait Tray[T] {
  val tray = ListBuffer.empty[T]

  def add[T] (t: T) = tray += t
  def get[T]: List[T] = tray.toList
}
Run Code Online (Sandbox Code Playgroud)

然后我想将特征混合到一个对象中,如下所示:

object Test with Tray[Int]
Run Code Online (Sandbox Code Playgroud)

但是在add和中存在类型不匹配get:

Test.add(1)
// ...
Run Code Online (Sandbox Code Playgroud)

我怎么能让这个工作?或者我的错误是什么?

singleton scala traits extend type-mismatch

7
推荐指数
1
解决办法
2万
查看次数

防止sphinx执行继承的doctests

我们创建了一个大量使用(带继承)numpy的MaskedArrays的库.但是我想在make doctest不测试numpy的继承方法的情况下运行sphinx ,因为它们会导致大约100次失败.

这看起来像这样:

class _frommethod:
    """
    Adapted from numpy.ma._frommethod
    """

    def __init__(self, func_name):
        self.__name__ = func_name
        self.__doc__ = getattr(MaskedArray, func_name).__doc__
        self.obj = None

    def __get__(self, obj, objtype=None):
        self.obj = obj
        return self

    def __call__(self, a, *args, **params):
        # Get the method from the array (if possible)
        method_name = self.__name__
        method = getattr(a, method_name, None)
        if method is not None:
            return method(*args, **params)
        # Still here ? Then a is not a MaskedArray
        method = getattr(MaskedTimeData, method_name, None) …
Run Code Online (Sandbox Code Playgroud)

python doctest numpy python-sphinx

5
推荐指数
1
解决办法
217
查看次数

用装饰器取消激活功能

是否可以使用python装饰器"停用"函数?这是一个例子:

cond = False

class C:

    if cond:
        def x(self): print "hi"

    def y(self): print "ho"
Run Code Online (Sandbox Code Playgroud)

有可能用装饰器重写这段代码吗?

class C:

    @cond
    def x(self): print "hi"

    def y(self): print "ho"
Run Code Online (Sandbox Code Playgroud)

背景:在我们的库中有一些依赖项(如matplotlib)是可选的,这些只需要几个函数(用于debug或fronted).这意味着在某些系统上matplotlib不安装在其他系统上,但两者都应该运行(核心)代码.因此,如果未安装matplotlib,我想禁用某些功能.有这么优雅的方式吗?

python decorator python-decorators

4
推荐指数
1
解决办法
1521
查看次数

仅显示追溯的第一行和最后一行

我已经用python构建了一些内部DSL。我正在使用assertvor验证。如果最终用户键入了错误的参数,则dsl应该报告错误之处。此刻看起来像这样:

Traceback (most recent call last):
  File "tests/maskedtimefilter_test/FilterDSL_test.py", line 63, in test_dsl_validation
    input(0): self.regular
  File "/Users/sh/reetz/pythonpath/maskedtimedata/maskedtimefilter.py", line 885, in __lshift__
    kwargs = self.dsl_validation(kwargs)
  File "/Users/sh/reetz/pythonpath/maskedtimedata/maskedtimefilter.py", line 1483, in dsl_validation
    check_if_valid(parameter)
  File "/Users/sh/reetz/pythonpath/maskedtimedata/dsl.py", line 47, in kernel_a
    def kernel_a (x): assert isinstance(x, (list, tuple, np.ndarray)), "kernel must be a list."
AssertionError: kernel must be a list.
Run Code Online (Sandbox Code Playgroud)

但是最终用户是工程师,而不是计算机科学家。因此,使用最小的Traceback很方便。是否可以像这样将Traceback缩小到基本信息(故障在哪里,是什么原因)?:

Traceback (most recent call last):
  File "tests/maskedtimefilter_test/FilterDSL_test.py", line 63, in test_dsl_validation
    input(0): self.regular
AssertionError: kernel must be a list. …
Run Code Online (Sandbox Code Playgroud)

python dsl

2
推荐指数
2
解决办法
2071
查看次数