Scala:как я могу установить пакет для работы с системой в repl?

в Python, если я устанавливаю пакет с pip install package_name, Я могу открыть Python repl, введя python и просто импортируйте пакет по его имени, независимо от того, в каком каталоге я сейчас нахожусь в файловой системе.

вот так

$ python
Python 2.7.3 (default, Sep 26 2013, 20:03:06) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> 

и requests библиотека импортирована, и я могу играть с ней в repl.

в Scala, я знаю как это сделать в проекте, который использует sbt, но для целей обучения я хотел бы установить пакет таким образом, чтобы что я могу просто набрать scala в командной строке, а затем импортировать установленный пакет, не будучи привязанным к определенному проекту.

$ scala
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_40).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import scalaz._
<console>:7: error: not found: value scalaz
       import scalaz._

как я могу это сделать?

3 ответов


Scala отличается от Python. Код, скомпилированный для Scala 2.9.x не совместим с 2.10.X. Таким образом, глобальные определения могут вызвать много проблем, если вы работаете с разными версиями.

можно использовать SBT и добавить в $HOME/.СБТ/Плагины/сборки.sbt

libraryDependencies += "org.scalaz" %% "scalaz-core" % "7.0.4"

или

libraryDependencies += "org.scalaz" % "scalaz-core_2.10" % "7.0.4"

а затем перейдите в /tmp и запустите Scala REPL с SBT:

sbt console

но в долгосрочной перспективе это не очень хорошая идея.

самое лучшее было бы установить SBT, создать файл build.sbt и вложи в него вот это:--6-->

libraryDependencies += "org.scalaz" % "scalaz-core_2.10" % "7.0.4"

scalaVersion := "2.10.2" 

initialCommands in console := "import scalaz._, Scalaz._"

Теперь перейдите с помощью консоли в папку build.sbt и run

sbt console

С этим вы можете экспериментировать с REPL и уже импортировали scalaz и в пути к классу. Кроме того, легко добавлять дополнительные зависимости. SBT классный, вам не нужно устанавливать новые версии Scala вручную, просто объявите его в сборке.sbt.


кроме С. Р. И Я использую следующее решение, скрипт:

/usr/bin/scalaz

    #!/bin/sh
    scala -cp  ~/.ivy2/cache/org.scalaz/scalaz-core_2.10/bundles/scalaz-core_2.10-7.1.0-M3.jar ... other libs

тогда просто позвоните в терминал:

$ scalaz
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_40).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import scalaz._; import Scalaz._
import scalaz._
import Scalaz._

scala> Monad[Option].point(1)
res0: Option[Int] = Some(1)

scala>

это обычно не рекомендуется, так как большинство библиотек jar предназначены для использования вместе с проектами программистов. Кроме того, в отличие от других экосистем, библиотеки jar обычно устанавливаются с помощью некоторых инструментов управления библиотеками пользовательского режима, таких как ivy или maven или sbt, как вы могли заметить.

если вы действительно хотите сделать это, вы можете установить баночки в местоположение, которое вы можете узнать из scala.bat или scala файл сценария оболочки в комплекте вместе с вашим распределением scala. Кроме того, вы можете создать свой собственный Scala repl, который может загружать глобально устанавливаемые библиотеки из некоторого настроенного местоположения. В любом случае, это требует занято TOOL_CLASSPATH.

P. S: в настоящее время у меня нет доступа к фактическому чтобы помочь вам с этим, но вы можете посмотреть здесь и здесь чтобы понять, что я имею в виду. Обратите внимание, что эти файлы могут не показывать, как.файлы летучей мыши структурированы так же, как и в дистрибутиве(и могут быть довольно устаревшими). Пожалуйста, посмотрите его в официальном распространении для информации.

редактировать

я могу объяснить немного больше теперь, когда я вернулся и посмотрел на фактический Scala batch и shell скрипты включены в официальный дистрибутив : -)

как я уже сказал выше,scala скрипт загружает все файлы jar, присутствующие в его и соответственно вызова scala as scala -toolcp $TOOLCP если он не пуст. Теперь, вы можете просто вызвать скрипт так: myscalascript <list-of-paths-to-be-added-to-toolcp>. Или вы можете просто сохранить одну папку и продолжать добавлять новые библиотеки в эту папку. Надеюсь, это поможет - как говорили другие, do следите за проблемами бинарной совместимости. Проблемы двоичной несовместимости будут затрагивать только основные версии scala, второстепенные версии должны быть полностью совместимы. Наконец, под угрозой повторяясь до смерти, используйте это только если ты уверен, что хочешь этого. :-)