导入失败。无法找到SCons文件:导入SCons.Script

时间:2014-07-22 20:56:39

标签: macos python-2.7 scons

这是我在这里的第一个问题,也是我与scons的第一次接触。我使用命令“sudo python setup.py install --symlink-scons --standard-lib”从源代码运行构建。它似乎没有错误地构建但是失败如下:

$ scons --version
Import failed. Unable to find SCons files in:
  /usr/local/bin/../engine
  /usr/local/bin/scons-local-2.3.2
  /usr/local/bin/scons-local
  /usr/local/lib/scons-2.3.2
  /System/Library/Frameworks/Python.framework/Versions/2.7/lib/scons-2.3.2
  /usr/local/lib/python2.7/site-packages/scons-2.3.2
  /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scons-2.3.2
  /System/Library/Frameworks/Python.framework/Versions/2.7/lib/scons-2.3.2
  /usr/local/lib/scons
  /System/Library/Frameworks/Python.framework/Versions/2.7/lib/scons
  /usr/local/lib/python2.7/site-packages/scons
  /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/scons
  /System/Library/Frameworks/Python.framework/Versions/2.7/lib/scons
Traceback (most recent call last):
  File "/usr/local/bin/scons", line 190, in <module>
    import SCons.Script
ImportError: No module named SCons.Script

Python版本是2.7.5;在OS X Mavericks 10.9.4上运行。没有以“SCons.Script”开头的文件在系统的任何位置。

感谢您的帮助。

4 个答案:

答案 0 :(得分:3)

对我来说 - OS X(darwin)以下工作正常(在浪费了几天这个问题之后):

安装scons后无法正常工作:

从python控制台打印python导入路径:

$python
>>import sys
>>print sys.path

查找以“site-packages”结尾的路径。 cd在那里寻找以scons开头的目录。你应该看到至少一个看起来像这个“sons-x.y.z”(版本)的目录。

回到网站包。

mkdir SCons

确保它是空的。

现在将原始SCons目录中的所有内容复制到新目录(根据需要修改以下行):

cp -R scons-x.y.z/SCons/ SCons/

答案 1 :(得分:0)

似乎scons使用LIBPATH来定位库,因此可能比上面提到的PYTHONHOME更好。

答案 2 :(得分:0)

TL; DR::将python移至python2,并将python3复制/符号链接至python

这适用于Windows(MinGW)和Linux(已通过Ubuntu(作为Docker映像)和Linux Mint(非Docker)进行验证)。我没有Mac,因此无法在那里进行测试,但是据我所知,这种情况发生在UNIX系统(和UNIX“仿真器”,如MinGW)上,那里有两个Python版本。稍后会详细讨论可能的原因。

另一个答案建议移动SCons目录-对我来说,问题是SCons目录在正确的路径中。在Windows上,错误输出显示我SCons尝试在C:/msys64/mingw64/scons-3.0.5C:/msys64/mingw64/scons-3.0.5中寻找SCons。这两个目录都不是真正可以放入的目录,但这无关紧要。它不会尝试搜索它实际所在的目录(Python 3 site-packages目录)。

我使用Python3,并在Python3中安装了SCons。但是:

$ python --version
Python 2.7.16

因此,基于一个疯狂的猜测,我在Pytho周围进行了改组,并确保python指向Python 3:

$ # cd into where ever the binaries are (usually /usr/bin on UNIX - you can double-check with `which python`)
$ mv python python2 
$ ln -s python3 python

之后,SCons工作了。如果已经存在python2,则在创建符号链接之前只需rm python。进行移动的目的是保留对Python 2的访问。如果根本不希望使用Python 2,则可以在确保python点之前完全卸载Python 2(如果使用Python 2,则可以完全卸载Python 3)。正确的版本。

就像我之前说的,我使用Python3安装了SCons,但是python指向Python 2而不是Python3。如果您使用Python 2安装了SCons,但是python指向Python 3,这种方法应该也可以工作(但是您必须更改二进制文件的名称)。如果python指向与您安装SCons相同的版本,那么这对您不起作用。

我很确定导致错误的原因是混合使用了不同版本的Python(Python 2和Python 3)。也许SCons尝试通过查找默认二进制文件来调用Python,这在python指向Python 2而不是Python 3时会引起问题。我使用的Linux Docker映像实际上预装了Python 2和Python 3。我想一些完整的发行版也可以(我还没有检查我的安装)。我不想进一步研究到底是什么原因,因为我不想。

答案 3 :(得分:0)

我使用conda和brew uninstall scons

修复了此问题
conda activate
conda install scons
scons