如何在virtualenv中使用外部库?

4

我正在尝试学习如何使用外部库。我有一个在Spark上成功运行的程序,现在我想导入外部库。我正在使用virtualenv,但每次提交时,Spark都会抱怨找不到文件。

以下是我尝试过的命令之一:

/path/to/spark-1.1.0-bin-hadoop2.4/bin/spark-submit ua_analysis.py --py-files `pwd`/venv/lib/python2.7/site-packages

我尝试使用--py-files标志逐个添加文件,还尝试了以下子目录。

venv/lib
venv/python2.7
venv/lib/python2.7/site-packages/<package_name>

所有这些都会产生以下错误。
ImportError: ('No module named <module>', <function subimport at 0x7f287255dc80>, (<module>,))

    org.apache.spark.api.python.PythonRDD$$anon$1.read(PythonRDD.scala:124)
    org.apache.spark.api.python.PythonRDD$$anon$1.<init>(PythonRDD.scala:154)
    org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:87)
....

我也尝试将这些文件复制到 pyspark 目录,但没有成功。
2个回答

8

在创建虚拟环境时,使用--system-site-packages选项传递给virtualenv

virtualenv --system-site-packages venv

如果您忘记了传递选项:
rm venv/lib/python2.7/no-global-site-packages.txt

通过这两种方式,你可以在虚拟环境中导入系统级别的软件包:import system-site-packages

1

不确定上面的答案在我的情况下是否仍然有效,需要进行修改:

include-system-site-packages = false 修改为 include-system-site-packages = true

在我的pyvenv.cfg文件中,该文件位于我的特定虚拟环境(即'virtaulenv_number_1'文件夹)中。现在我可以使用在虚拟环境中不存在但存在于系统范围的Python安装中的库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接