安装Python3后,sh和py运行 |
您所在的位置:网站首页 › sys文件怎么安装 › 安装Python3后,sh和py运行 |
我制作了一个即使在没有python3的环境中也可以在安装python3之后执行的python文件。 计划 我想写python 如果您仍然写,我想用python3编写 如果你仍然写,我希望别人使用它 内部环境中的标准python是2.4(非常痛苦!)(没人在使用它!) 不可能100%告诉公司里的人"将其上传到python3并使用它!" 即使您编写用于上传到python3的sh,也将有两个文件,并且心理障碍也会增加(我认为)然后,在执行它时,您必须应用自动更新以使其知道版本(也有一个文件) 假定在开发环境中几乎没有任何人可以root用户身份执行任何操作。 参考 如何在Perl,Python和Ruby脚本中编写正确的shebang 您可以写多个shebang! ??我搜寻了。 只是Don Pisha,没有这篇文章,我不会做这么愚蠢的事情。 如何编写可作为PHP执行的Ruby 这是一个不同的想法,但是我受到一个文件适用于多种语言的事实的启发。我也想尝试一下。 码 install_python3.py 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071#!/bin/sh # -*- coding: UTF-8 -*- """:" # ここにshを書く # インストールバージョンと圧縮ファイルの設置&展開 tmp='/tmp/' pythonver='3.4.3' binarypath=$tmp'Python-'$pythonver # インストール先 lib='/usr/lib/' srcpath=$lib'python'$pythonver # python3のシンボリックリンク設置場所 bin='/usr/bin/' lnname='python3' if [ -f $bin$lnname ]; then # python3があればそのままpython実行 echo 'インストール不要' exec $lnname "$0" ${1+"$@"} fi echo 'インストール必要' if [ -f $binarypath'.tgz' ]; then echo $binarypath'.tgz は既にあります' else echo $binarypath'.tgz をダウンロードします' wget https://www.python.org/ftp/python/${pythonver}/Python-${pythonver}.tgz -P ${tmp} fi if [ -d $binarypath ]; then echo $binarypath' は既にあります' else echo $binarypath' に展開します' tar zxf $binarypath'.tgz' -C $tmp fi if [ -d $srcpath ]; then echo $srcpath' へインストール済みです' else echo $srcpath' へインストールします' # cd すると後のpython実行でコケるので、インストール後に戻る pwd=`pwd` cd $binarypath && ./configure --prefix=${srcpath} && make && make install cd $pwd fi if [ -f $bin$lnname ]; then echo $bin$lnname' 設置済みです' else echo $bin$lnname' を設置します' ln -s $srcpath'/bin/python3' $bin$lnname fi exec $lnname "$0" ${1+"$@"} """ # ここからpython import sys version = sys.version_info if version[0] == 2: print('2') else: print(version[0])首先,如果python的版本为2,我将python替换为3,但是我停止了它,因为它似乎会影响其他因素,实际上yum停止了工作。 下面的失败示例就是其中的一个残余。 失败例子 动态语言被翻译器逐行分析和执行,对吗? 那没问题的部分也可以吗? 当我正常使用它时,我总是意识到它不会发生,但是一旦我实现了目标,我认为它对我来说很方便。 我试图确定python中的版本并更新python 中的python 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#!/usr/bin/python # -*- coding: utf-8 -*- import sys import os import tarfile version = sys.version_info if version[0] == 2: print 'バージョン2のため、3に更新します' if not os.path.isfile('/tmp/Python-3.4.3.tgz'): print 'ダウンロードします' os.system('wget https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz -P /tmp') else: print '/tmp/Python-3.4.3.tgz はすでに存在しています' # 2.4なのでextractallはナイよー if not os.path.isdir('/tmp/Python-3.4.3'): print '/tmp/Python-3.4.3 に展開し、インストールします' tf = tarfile.open('/tmp/Python-3.4.3.tgz', 'r') tf.list() for item in tf: tf.extract(item, '/tmp/') # ビルド if not os.path.isdir('/usr/lib/python3.4.3'): os.system('cd /tmp/Python-3.4.3/ && ./configure --prefix=/usr/lib/python3.4.3 && make && make install') else: print '/usr/lib/python3.4.3 にインストール済みです' else: print '/tmp/Python-3.4.3 に展開済みです' # /usr/bin/python の置き換え if not os.path.isfile('/usr/bin/python.old'): os.rename('/usr/bin/python', '/usr/bin/python.old') os.symlink('/usr/lib/python3.4.3/bin/python3.4', '/usr/bin/python') # 既存の/usr/bin/python2 がpython へのシンボリックリンクなので更新しておく # 上書きはムリなので一回削除する os.remove('/usr/bin/python2') os.symlink('/usr/bin/python2.4', '/usr/bin/python2') else: print '/usr/lib/python は置き換え済みです' sys.exit() # ここは3の場合に実行されるはず print('test')在 python2时,print('test')是安全的,所以我认为"我可以走!",但是当我将其提高到3时,毕竟print是syntaxerror 经检查,似乎print和print()均可与python2一起使用... 我对自己的信念(承担责任)感到鼓舞 好吧,在我开始写作之前,我只是阅读了PHP运行时和编译时间,并意识到这是不可能的。 即使看起来像 php hoge.php,您在命令中指定源代码文件并直接执行它,现代解释器也会解析源代码,然后将其编译为虚拟机字节码。 Ruby,Python,Perl5,Emacs也是如此。 但是我只是认为无需在python2端使用print而保护syntax的python3仍然可以工作! 我没有使用它的计划。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |