我在Spark上使用Python时遇到了问题.我的应用程序有一些依赖项,例如numpy,pandas,astropy等.我不能使用virtualenv来创建一个包含所有依赖项的环境,因为除了HDFS之外,集群上的节点没有任何公共mountpoint或文件系统.因此我坚持使用spark-submit --py-files.我将site-packages的内容打包到一个ZIP文件中并像使用--py-files=dependencies.zip选项一样提交作业(最简单的方法是在Spark执行器节点上安装Python依赖项?).但是,群集上的节点似乎仍然没有看到内部的模块,并且ImportError在导入numpy时它们会抛出这样的内容.
File "/path/anonymized/module.py", line 6, in <module>
import numpy
File "/tmp/pip-build-4fjFLQ/numpy/numpy/__init__.py", line 180, in <module>
File "/tmp/pip-build-4fjFLQ/numpy/numpy/add_newdocs.py", line 13, in <module>
File "/tmp/pip-build-4fjFLQ/numpy/numpy/lib/__init__.py", line 8, in <module>
#
File "/tmp/pip-build-4fjFLQ/numpy/numpy/lib/type_check.py", line 11, in <module>
File "/tmp/pip-build-4fjFLQ/numpy/numpy/core/__init__.py", line 14, in <module>
ImportError: cannot import name multiarray
Run Code Online (Sandbox Code Playgroud)
当我切换到virtualenv并使用本地pyspark shell时,一切正常,所以依赖都在那里.有谁知道,什么可能导致这个问题,以及如何解决它?
谢谢!
我试图动态地从不同的目录导入模块.我正在回答这个问题的答案.我在名为foo的目录中有一个名为bar的模块.主脚本将在父目录中运行到foo.
这是我到目前为止在我的测试脚本中的代码(它在父目录中运行到foo)
#test.py
import imp
mod = imp.load_source("bar","./foo")
Run Code Online (Sandbox Code Playgroud)
和bar.py的代码
#bar.py
class bar:
def __init__(self):
print "HELLO WORLD"
Run Code Online (Sandbox Code Playgroud)
但是,当我运行test.py时,我收到此错误:
Traceback (most recent call last):
File "C:\Documents and Settings\user\Desktop\RBR\test.py", line 3, in <module>
mod = imp.load_source("bar","./foo")
IOError: [Errno 13] Permission denied
Run Code Online (Sandbox Code Playgroud) 如何从其他文件夹访问模块?
这是文件结构:
/<appname>
/config
__init__.py
config.py
/test
test.py # I'm here
Run Code Online (Sandbox Code Playgroud)
我想从test.py中访问config.py中的函数.我该怎么做?
这是我的导入:
import config.config
Run Code Online (Sandbox Code Playgroud)
当我运行test.py脚本时,它总会说:
ImportError: No module named config.config
Run Code Online (Sandbox Code Playgroud)
我做错什么了吗?
我正在改变一堆旧的python代码,偶尔会遇到包之间的名称冲突.我有一个关于何时应该使用绝对导入以及是否适合仅按名称导入同级模块的问题.
/package/
/package/__init__.py
/package/subA
/package/subA/__init__.py
/package/subA/moduleA.py
/package/subA/moduleB.py
/package/subB
/package/subB/__init__.py
/package/subB/moduleA.py
/package/subB/moduleB.py
Run Code Online (Sandbox Code Playgroud)
包中的每个import语句应该是这样的:
import package.subX.moduleX
Run Code Online (Sandbox Code Playgroud)
要么
from package.subX import moduleX
Run Code Online (Sandbox Code Playgroud)
在子包__init__.py文件中怎么样?简单地说是不对的
import moduleA
import moduleB
Run Code Online (Sandbox Code Playgroud)
或者,在/package/subA/moduleA.py中,简单地放入是不对的:
import moduleB
Run Code Online (Sandbox Code Playgroud) 我想创建一个Python模块的"库",我可以从几个单独的项目文件夹中访问它.
例如,我希望/ proj1 /和/ proj2 /中的Python脚本可以访问/ lib /.
/lib/help.py
/lib/more_help.py
/proj1/script.py
/proj1/script2.py
/proj2/this_script.py
/proj2/another_script.py
Run Code Online (Sandbox Code Playgroud)
我不希望单个目录包含所有Python脚本,因为这看起来相当混乱.我也绝对不想将相同的/ lib /脚本复制到每个不同的项目中.
在Python中处理这个问题的理想方法是什么?是否附加到Python的路径?或者这更像是一个黑客?这似乎具有使文件不太便携的缺点.或者是关于使用相对路径的问题/答案?或者是其他东西?
我应该补充一点,我对Python 2.x感兴趣而不是3.x,如果重要的话.
我知道堆栈溢出有很多类似的问题.但是,共同的答案对我来说似乎并不适用.
我有这样的文件结构
proj/
lib/
__init__.py
aa.py
bb.py
test/
__init__.py
aa_test.py
Run Code Online (Sandbox Code Playgroud)
我想如果我在test.py中包含代码
import lib.aa
Run Code Online (Sandbox Code Playgroud)
要么
from lib import aa
Run Code Online (Sandbox Code Playgroud)
我将能够引用lib/目录中的模块.但那没用.
所以我尝试添加到路径,并正确添加它:
os.environ["PATH"] += ":%s" % os.path.abspath(os.path.join("..",""))
print os.environ["PATH"]
Run Code Online (Sandbox Code Playgroud)
但即使是现在,当我尝试上面的导入语句时......我不断收到错误
ImportError: No module named aa
Run Code Online (Sandbox Code Playgroud)
要么
ImportError: Importing from non-package <Something...>
Run Code Online (Sandbox Code Playgroud)
有什么明显的东西我不见了吗?
有没有办法检查我__init__.py是否正确配置了我的文件,或者查看我的包层次结构?
我已经检查了以下其他StackOverflow问题:
也许对某些人来说,这些可能会回答我的问题,但据我所知,我仍然不了解情况.
我正在尝试导入numpy以便matplotlib可以工作,但是在__init__.pynumpy文件夹中执行该文件时,会显示以下错误消息:
ImportError: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python intepreter from there.
Run Code Online (Sandbox Code Playgroud)
解释从其源目录导入内容的意义,而不是导入它的其他方式.这是否意味着它在导入时不应该是源代码?或者它是否意味着它实际上只是我导入的错误目录/文件夹.我知道另一个StackOverflow的答案是:
这个信息相当不言自明; 调用Python时,您的工作目录不应该是numpy源目录; 应该安装numpy,你的工作目录应该是它所在的目录.
但是,我不明白这一点.你不应该导入你想要使用的东西吗?我假设import命令将源目录组合到此语句中的当前工作目录中.
我还阅读了其他答案,例如:
使用distutils安装本地目录
使用virtualenv创建虚拟系统目录
使用Enthought的EPD将numpy预先安装在我认为是系统目录的地方,以及
使用命令$ dpkg -i --force-not-root --root=$HOME mypackagename.deb来创建我认为是某种被视为系统目录的子系统目录.
所以,如果我错了,请纠正我,但是在某种程度上,numpy强烈要求以某种方式安装在主系统目录中?
我正在使用没有管理权限的Windows机器.他们安装了Python 3.3 Shell以及matplotlib.当运行命令提示符,python而python3无法识别.我必须从应用程序菜单运行Python shell.我可以成功开始从我自己的目录开始导入matplotlib,不同于他们的目录,但它在到达__init__.pynumpy模块时停止,如果它存在并报告上述错误.
幸运的是,我的管理员能够直接在site-packages文件夹中正确安装numpy .谢谢你回答我的问题.因为你,我更了解情况.
可以说我有以下python源文件布局:
lib/foo.py
lib/foo/bar.py
Run Code Online (Sandbox Code Playgroud)
然后在我的源代码中:
from foo import gaz
Run Code Online (Sandbox Code Playgroud)
我收到导入错误:
ImportError: No module named foo
Run Code Online (Sandbox Code Playgroud)
如何拥有.py文件和具有相同名称的目录,以便我可以执行以下操作:
from foo import gaz
from foo.bar import wakawaka
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我的脚本无法运行,我有一些非常神秘的行为.显然,下面的脚本是微不足道的,什么都不做,但它是在一个真实的脚本中再现行为.这是调用文件中的代码test.py.
import os
os.chdir('/home/jacob/twcSite')
import app
Run Code Online (Sandbox Code Playgroud)
app位于'home/jacob/twcSite',与当前目录不同的目录,包含test.py.如果我python test.py在命令行键入,我得到ImportError: No module named app.但是,如果我只是键入python以启动交互式解释器并复制粘贴完全相同的三个命令,那么它可以正常工作而不会导致导入错误.
什么可能导致此错误?这是python的相同版本.完全相同的代码行.为什么我在两种情况下都会有不同的行为?只是为了给出更多的细节,如果你os.getcwd()在调用os.chdir它之前和之后打印输出确实声称已经改变到正确的目录(尽管显然不是这种情况).我正在运行Ubuntu 14.04,Python版本2.7.6.
我安装了wxPython 3.0.1.1,但我无法import wx使用Python 3.4.1.我收到以下错误:
Python 3.4.1 (v3.4.1:c0e311e010fc, May 18 2014, 00:54:21)
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import wx
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named 'wx'
Run Code Online (Sandbox Code Playgroud)
不过,我可以import wx使用Python 2.7(我的默认安装OS X 10.9):
Python 2.7.5 (default, Mar 9 2014, 22:15:05)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] …Run Code Online (Sandbox Code Playgroud) python ×10
import ×5
importerror ×2
apache-spark ×1
directory ×1
dynamic ×1
macos ×1
matplotlib ×1
numpy ×1
package ×1
pyspark ×1
python-2.x ×1
python-3.x ×1
wxpython ×1