这是我在这里的第一个问题,也是我与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”开头的文件在系统的任何位置。
感谢您的帮助。
答案 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.5
和C:/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