安装 Python Cryptography 错误
Posted
技术标签:
【中文标题】安装 Python Cryptography 错误【英文标题】:Installing Python Cryptography error 【发布时间】:2014-11-23 16:45:38 【问题描述】:运行pip install cryptography
时,我得到以下结果
pip install cryptography
Downloading/unpacking cryptography
Running setup.py egg_info for package cryptography
Traceback (most recent call last):
File "<string>", line 16, in <module>
File "/tmp/pip-build-root/cryptography/setup.py", line 174, in <module>
"test": PyTest,
File "/usr/lib64/python2.6/distutils/core.py", line 152, in setup
dist.run_commands()
File "/usr/lib64/python2.6/distutils/dist.py", line 975, in run_commands
self.run_command(cmd)
File "/usr/lib64/python2.6/distutils/dist.py", line 995, in run_command
cmd_obj.run()
File "<string>", line 14, in replacement_run
File "/usr/lib/python2.6/site-packages/setuptools/command/egg_info.py", line 254, in find_sources
mm.run()
File "/usr/lib/python2.6/site-packages/setuptools/command/egg_info.py", line 308, in run
self.add_defaults()
File "/usr/lib/python2.6/site-packages/setuptools/command/egg_info.py", line 332, in add_defaults
sdist.add_defaults(self)
File "/usr/lib/python2.6/site-packages/setuptools/command/sdist.py", line 187, in add_defaults
build_py = self.get_finalized_command('build_py')
File "/usr/lib64/python2.6/distutils/cmd.py", line 319, in get_finalized_command
cmd_obj.ensure_finalized()
File "/usr/lib64/python2.6/distutils/cmd.py", line 117, in ensure_finalized
self.finalize_options()
File "/usr/lib/python2.6/site-packages/setuptools/command/build_py.py", line 61, in finalize_options
_build_py.finalize_options(self)
File "/usr/lib64/python2.6/distutils/command/build_py.py", line 50, in finalize_options
('force', 'force'))
File "/usr/lib64/python2.6/distutils/cmd.py", line 305, in set_undefined_options
src_cmd_obj.ensure_finalized()
File "/usr/lib64/python2.6/distutils/cmd.py", line 117, in ensure_finalized
self.finalize_options()
File "/tmp/pip-build-root/cryptography/setup.py", line 88, in finalize_options
self.distribution.ext_modules = get_ext_modules()
File "/tmp/pip-build-root/cryptography/setup.py", line 65, in get_ext_modules
from cryptography.hazmat.primitives import constant_time, padding
File "cryptography/hazmat/primitives/constant_time.py", line 49, in <module>
_ffi = cffi.FFI()
File "/tmp/pip-build-root/cryptography/cffi-0.8.6-py2.6-linux-x86_64.egg/cffi/api.py", line 56, in __init__
import _cffi_backend as backend
ImportError: /tmp/pip-build-root/cryptography/cffi-0.8.6-py2.6-linux-x86_64.egg/_cffi_backend.so: failed to map segment from shared object: Operation not permitted
Complete output from command python setup.py egg_info:
running egg_info
writing requirements to pip-egg-info/cryptography.egg-info/requires.txt
writing pip-egg-info/cryptography.egg-info/PKG-INFO
writing top-level names to pip-egg-info/cryptography.egg-info/top_level.txt
writing dependency_links to pip-egg-info/cryptography.egg-info/dependency_links.txt
warning: manifest_maker: standard file '-c' not found
Traceback (most recent call last):
File "<string>", line 16, in <module>
File "/tmp/pip-build-root/cryptography/setup.py", line 174, in <module>
"test": PyTest,
File "/usr/lib64/python2.6/distutils/core.py", line 152, in setup
dist.run_commands()
File "/usr/lib64/python2.6/distutils/dist.py", line 975, in run_commands
self.run_command(cmd)
File "/usr/lib64/python2.6/distutils/dist.py", line 995, in run_command
cmd_obj.run()
File "<string>", line 14, in replacement_run
File "/usr/lib/python2.6/site-packages/setuptools/command/egg_info.py", line 254, in find_sources
mm.run()
File "/usr/lib/python2.6/site-packages/setuptools/command/egg_info.py", line 308, in run
self.add_defaults()
File "/usr/lib/python2.6/site-packages/setuptools/command/egg_info.py", line 332, in add_defaults
sdist.add_defaults(self)
File "/usr/lib/python2.6/site-packages/setuptools/command/sdist.py", line 187, in add_defaults
build_py = self.get_finalized_command('build_py')
File "/usr/lib64/python2.6/distutils/cmd.py", line 319, in get_finalized_command
cmd_obj.ensure_finalized()
File "/usr/lib64/python2.6/distutils/cmd.py", line 117, in ensure_finalized
self.finalize_options()
File "/usr/lib/python2.6/site-packages/setuptools/command/build_py.py", line 61, in finalize_options
_build_py.finalize_options(self)
File "/usr/lib64/python2.6/distutils/command/build_py.py", line 50, in finalize_options
('force', 'force'))
File "/usr/lib64/python2.6/distutils/cmd.py", line 305, in set_undefined_options
src_cmd_obj.ensure_finalized()
File "/usr/lib64/python2.6/distutils/cmd.py", line 117, in ensure_finalized
self.finalize_options()
File "/tmp/pip-build-root/cryptography/setup.py", line 88, in finalize_options
self.distribution.ext_modules = get_ext_modules()
File "/tmp/pip-build-root/cryptography/setup.py", line 65, in get_ext_modules
from cryptography.hazmat.primitives import constant_time, padding
File "cryptography/hazmat/primitives/constant_time.py", line 49, in <module>
_ffi = cffi.FFI()
File "/tmp/pip-build-root/cryptography/cffi-0.8.6-py2.6-linux-x86_64.egg/cffi/api.py", line 56, in __init__
import _cffi_backend as backend
ImportError: /tmp/pip-build-root/cryptography/cffi-0.8.6-py2.6-linux-x86_64.egg/_cffi_backend.so: failed to map segment from shared object: Operation not permitted
----------------------------------------
Command python setup.py egg_info failed with error code 1 in /tmp/pip-build-root/cryptography
Storing complete log in /root/.pip/pip.log
我猜他们的一些我缺少的依赖项有问题?
当我运行sudo yum install gcc libffi-devel python-devel openssl-devel
来安装所需的依赖项时,我得到以下结果
sudo yum install gcc libffi-devel python-devel openssl-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirror.econdc.com
* epel: mirrors.coreix.net
* extras: centos.hyve.com
* updates: mirror.sov.uk.goscomb.net
Setting up Install Process
Package gcc-4.4.7-4.el6.x86_64 already installed and latest version
Package libffi-devel-3.0.5-3.2.el6.x86_64 already installed and latest version
Package python-devel-2.6.6-52.el6.x86_64 already installed and latest version
Package openssl-devel-1.0.1e-16.el6_5.15.x86_64 already installed and latest version
Nothing to do
有人对我缺少什么有任何建议吗?
【问题讨论】:
failed to map segment from shared object: Operation not permitted
表示不允许读取 cffi 编译期间创建的临时共享对象。这可能(显然)在某些条件下使用 SELinux 发生,尽管我自己从未见过。您正在运行什么发行版?
关于这个问题的任何更新?我有同样的问题,CentOS 6.4
这个 ubuntu debian 解决方案对我有用 ***.com/questions/22073516/…
【参考方案1】:
Chroot 和重新挂载/tmp
是不必要的,因为您使用的是提供此选项的pip
(pip help install
):
-b, --build <dir> Directory to unpack packages into and build in.
只需将其设置为没有noexec
的目录。
【讨论】:
我在共享服务器中,无法更改挂载标志。感谢您指出这一点!【参考方案2】:在某些系统上,这应该可以工作:
TMPDIR=~/tmp pip install cryptography
【讨论】:
【参考方案3】:你也可以挂载没有 noexec 标志的卷,方法是从 /etc/fstab 中删除它或执行 mount -o remount exec /tmp
fstab 解决方案不太安全,它可以被视为安全漏洞,因为任何人都可以将脚本放在 /tmp 上并执行它们。
更多信息here.
【讨论】:
【参考方案4】:我遇到了同样的问题,碰巧服务器安装了 /tmp 并使用 noexec。 这导致了各种问题。解决它的一种方法是创建一个“chroot”环境,其中包含一个允许文件执行的“/tmp”目录:
关注this article,了解如何规避此问题。
创建一个包含允许文件执行的“/tmp”目录的“chroot”环境:
mkdir -p /root/chroot /root/tmp mount --bind / /root/chroot mount --bind /root/tmp /root/chroot/tmp chroot /root/chroot
“chroot”进入你创建的环境:
chroot /root/chroot
此时,您处于“chroot”环境中,可以运行任何您需要的命令。
运行安装
完成后,键入以下命令:
退出
umount -l /root/chroot
【讨论】:
以上是关于安装 Python Cryptography 错误的主要内容,如果未能解决你的问题,请参考以下文章
尝试安装Python包时出现OpenSSL和Cryptography问题
通过离线安装包解决了 from cryptography.hazmat.bindings._openssl import ffi, lib ImportError: /usr/local/python