2017-11-18 10 views
2

私はpython 3.xとpython 2.xのモジュールを同じプログラムで組み合わせる方法を探しています。python 3とpython 2.7の両方のモジュールを使用するPythonプログラムを実行しますか?

現在、私たちはYAPSIを使用してそれらをロードしたいと思いますが、それは間違っていると思います。

**明らかに、そのモジュールはlibに依存していますが、現在はpython 3に変換されていないため、やる時間がかかります。

+1

なぜそれをしたいですか?どんな特定のユースケース? –

+0

主にモジュールが大きなサードパーティのライブラリに依存しているのは、Python 3とPython 2です。そのため、2to3ツールなどで簡単に変換することができます。 – YafimK

答えて

0

あなたは多くの作業を行うことができます。問題は主にprint-statementの構文エラーです。 シンプルなプリントはどのバージョンでも動作します。あなたは避けられない、印刷のいずれかのより高度な機能を使用する場合

print(" Supports all versions of Python!") 

しかし、あなたは構文エラーで終わるか、あなたが意図したものを印刷していないのいずれか。あなたは、印刷後に改行を避けるために、末尾にカンマを使用するので、もしPythonの2の末尾のコンマは、Python 2

下の構文エラーです

print('Text to print', end=' ') 

のようなPythonの3表情で、Pythonの3のパラメータになる。この意志を持っていますPythonの2.6の下で

機能への印刷を行うための

__future__ import 

があります。したがって、構文エラーやその他の違いを避けるには、print()を使用するファイルを、 future import print_functionから開始する必要があります。 futureインポートはPython 2.6以降でのみ動作します。したがって、Python 2.5以前では2つのオプションがあります。より複雑な印刷をより簡単なものに変換することも、Python 2とPython 3の両方で機能する別の印刷機能を使用することもできます。 印刷の問題を解決するには、よりトリッキーな独自の印刷機能を作成できます。

2)エラーをインポートします。標準ライブラリは、周りを取得の再編は、これが唯一の合併またはあなたがそれらを変換する必要があり、いくつかの古いモジュールのサブモジュールです新しいモジュールまたはのために、名前を変更した輸入のために動作します

try: 
    import configparser 
except ImportError: 
    import ConfigParser as configparser 

のような非常に簡単ですので、彼らが発生した かなり簡単な2to3。

3)整数の非互換性。

最初の1つは、int型とlong型がマージされているということです。これは、L接尾辞を追加することで整数が長くなるように指定できないことを意味します。 1Lは、あなたが

import sys 
if sys.version_info > (3,): 
    long = int 
long(1) 
1L 

別の変更が進リテラルの構文も変更されていることであるようにそれを避けることができるのPython 3 の構文エラーです。 To。小数点または16進値を使用して、8進数の値をコメントに入れないようにしてください。

f = 420 # 644 in octal, 'rw-r--r--' 

4)バイナリデータを処理する。 それらの中で最もトリッキーで最も複雑です。ドキュメントhereを読むことができます。

0

from @Frank answer;そのモジュールのソースコードを自分でpython 3xに変換することを強くお勧めします!Googleで検索して見つけることができる多くのツールがあります。

一般的に私はこの問題のためのpythonic方法はないと思います。はい、できます。トリッキーな方法で! (3つのトリッキーな方法があります):

は、まず:

  1. ダウンロードの両方のpython 2倍と3倍ポータブル通訳

  2. コピーと同じフォルダに

  3. を貼り付け

    あなたのプログラムの各部分をオリジナルのものと別に書きます インタプリタ今、あなたはexeファイルにこのフォルダをコンパイルすることができますpython3xメインプログラムを作成し、 サブプロセス、EXECまたは他の方法

  4. とのそれら二つの部分を呼び出す

  5. を(機能またはオブジェクトorintedとしてあなたのプログラムを書く)またはセットアップ( パッケージのexeファイル)して完了!

第二:

あなたはcythonとの友好している場合は、C/C++にご プログラムの各部分を変換することができ、その後、あなたは コードをPythonのためにそれらをマージしたりre_convertすることができます!

サード:

あなたは、Java(jarファイル)にご プログラムの各部分を変換することができjythonとの友好的であるならば、あなたは コードをPythonのためにそれらをマージしたりre_convertことができます!

グッドラック...

0

のPython 2と3は、1つのプロセス内で協力しません。おそらくPyro (Python remote objects)を使用してremote procedure callsを使用することができます。これは、マルチプロセッシング内のパイプと同様のパフォーマンス上の懸念があります。 SharedArrayは、共有メモリを使用する方が高速に動作できますが、数値配列に制限されています。

関連する問題