問題タブ [distutils]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Python distutilsは、マシンごとに異なる方法で拡張機能を構築します
私はたくさんのファイルを含むPython拡張モジュールに取り組んできました。1台のマシンでビルドしている間python setup.py build
、変更されたファイルを問題なく検出し、それらのファイルだけをビルドして、makeと同じようにすべてをリンクします。ただし、別のマシンでは、ファイルを1回変更すると、すべてのソースの再コンパイルがトリガーされます。
ただ明確にします。どちらのマシンも、パッケージが最新であることを検出し、何もしません。単一のファイルが変更された場合にのみ、それらの動作が分岐します。
2番目のマシンがこれを実行しているのはなぜですか?
マシン1(ファイルごとの適切な依存関係のチェックとビルドを実行します。)
マシン2(単一のソースファイルが変更されたときにすべてを再構築します。)
python - WindowsでのPythonパッケージのインストール
私は最近Pythonを学び始めましたが、パッケージの配布方法とインストール方法について少し混乱しています。
パッケージをインストールする公式の方法はdistutilsであることを理解しています。ソースのtarballをダウンロードして解凍し、次のコマンドを実行するとpython setup.py install
、モジュールが自動的にインストールされます。
ヘルパースクリプトに付属しているsetuptoolsについても知っています。配布に卵easy_install
を使用します。私が理解していることから、distutilsの上に構築され、上記と同じことを実行します。さらに、必要な依存関係をすべて処理し、すべてPyPiから取得します。
次に、pipもありますが、他のpipとどのように違うのかはまだわかりません。
最後に、私はWindowsマシンを使用しているため、多くのパッケージはWindowsインストーラーを介したバイナリビルドも提供します。特に、C / Fortranコードのコンパイルが必要なパッケージは、Windowsで手動でコンパイルするのは悪夢です(MSVCがあると仮定します)。または、必要なすべてのライブラリがセットアップされたMinGW / Cygwin開発環境..それでも、自分でnumpyまたはscipyを構築してみてください。そうすれば、理解できます!)
だから誰かが私がこれらすべてを理解するのを手伝って、それぞれの方法の違い、賛否両論を説明することができますか?それぞれがパッケージ(Windowsレジストリ、構成ファイルなど)を追跡する方法を知りたいです。特に、すべてのサードパーティライブラリをどのように管理しますか(インストールされているパッケージの一覧表示、無効化/アンインストールなど)。
c++ - distutils を使用して Linux で Python 拡張機能をクロスコンパイルする
Linux で Python/distutils/SWIG/C++ 拡張機能の Windows バージョンと Linux バージョンの両方をコンパイルする方法はありますか? 私が理解している限り、問題は少なくともpython-devのWindowsバージョンを入手することにあります。
ありがとうございました。
gcc - swig と distutils の使用時に GCC が標準ヘッダー ファイルを認識しない
まとめている C++ ライブラリの python ラッパーを生成しようとしています。SWIG に出会ったばかりで、これを distutils と組み合わせて使用しようとしています。私は他の誰かのコードを変更しているので、奇妙なエラーが予想されていましたが、これは混乱を招くだけです.
SWIG を使用して C++ ラッパー ファイルを生成することができました。現在、ラッパーをインストールするために修正バージョンの setup.py を実行しようとしています (それ自体が機能する場合と機能しない場合がありますが、それが来たらその橋を渡ります)。これを行うと、ヘッダー ファイルをインクルードできないというコンパイラ エラーがポップアップ表示されます。具体的には、string、ostream、sstream、map、および vector です。これらはすべて「include」として含まれる標準ライブラリです。
コード自体はコンパイルされますが、この方法でラッパーを作成しようとしてもコンパイルされません。
どの情報がこれに関連するかは完全にはわかりませんが、拡張機能は次のように作成されます。
実行される gcc コマンドは次のとおりです。
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/home/ben/Project/rewrite/include/Project -I/home/ben/Project/rewrite/インクルード/プロジェクト -I/usr/include/python2.6 -c ./project_rewrite_wrap.c -o build/temp.linux-i686-2.6/./project_rewrite_wrap.o
次のようなエラーが発生します。
./project_rewrite_wrap.c:2696:18: エラー: 文字列: そのようなファイルまたはディレクトリはありません
どんな考えでも大歓迎です、ありがとう。
python - distutils が使用する gcc のバージョンを変更する
私は Snow Leopard を使用していますが、distutils で gcc 4.2 ではなく gcc 4.0 を使用するようにしたいのですが、それを行う方法を誰か教えてもらえますか? /usr/bin/g* シンボリック リンクを変更し、C* 環境変数を設定しようとしましたが、役に立ちませんでした。何かご意見は?
python - Python拡張機能(.pyd)を別の拡張機能に動的にリンクする
Python拡張モジュールは単なるダイナミックライブラリなので、Python拡張を別の拡張に動的にリンクできると思います。問題はWindowsにあります。Python拡張機能にはの.pyd
代わりに拡張機能が与えられている.dll
ため、セットアップスクリプトを実行するときにdistutilsをそれらにリンクさせることができません。(Python拡張機能はファイル拡張子を使用するため、これはUNIXでは問題ではないと思い.so
ます。)
bar.pyd
にリンクする必要のある拡張子があると仮定しfoo.pyd
ます。基本的に、セットアップスクリプトで行ったことは次のとおりです。
これまでのところ、これは機能していません。これも可能ですか?そうだと思いますが、オンラインで何も見つかりませんでした。私はWindowsでMinGWを使用していますが、これを別のMSVC++や他のシステムでも動作させたいと思います。
編集:以前は、コンパイル時に作成されたオブジェクトファイル(foo.o
)を拡張機能のオプションに渡すことでこの問題を解決しました(これは、ですべてのシンボルのプロトタイプを定義した場合にのみ機能します):foo
extra_objects
foo
bar
これは正しい解決策ではなかったようですが、うまくいきました。私はダイナミックリンクをよく理解していないので、これはそれを行う正しい方法かもしれません。しかし、それは非常に間違っていると感じます。
次に、いくつかの明示的な引数をgccに渡して、インポートライブラリをコンパイルするようにしました。
bar
次に、新しいインポートライブラリにリンクしました。
これは文句なしにコンパイルされましたが、いくつかのシンボルにいくつかの問題がありました(具体的には、で再定義されたように見えるいくつかPyTypeObject
のfoo
グローバルがありましたbar
。両方のモジュールのが同じ定義を参照する必要がありPyTypeObject
ます)。
編集2:それで、私は問題を選び出しました。インポートライブラリをビルドしてリンクした後、関数シンボルは正しくエクスポートされていましたが、PyTypeObject
sが再宣言されていました。にがあったと仮定PyTypeOject Foo_Type
しfoo
ます。私はそれをで宣言しました、それはとの両方にfoo.h
含まれていました:foo.c
bar.c
私はそれを取り出して、これを上部近くに置きましたfoo.c
:
そしてこれは上部近くにありbar.c
ます:
これで問題は解決しました。次に、両方foo
でFoo_Typeを使用でき、Foo_Typebar
の同じ定義を参照しました。問題は、これがWindows以外のシステムでは機能しないことです。__declspec
sを取り出すだけで、他のシステムでも問題なく動作すると思います。
python - Python distutils.Extension : 同時実行レベルの設定
make -j<n>
Python 2.6 への C 拡張機能を構築するために、distutils.Extension を使用して setup.pyで a に相当するものを再現する方法を考えています。
私の望む結果: setup.py build
C コンパイラのインスタンスを 1 つだけではなく、同時にいくつか使用すること。
おそらく、私が見逃している環境変数が 1 つか 2 つあるでしょう。
ありがとう、フロリアン
python - Pipを使用してPythonパッケージをインストールするときにMinGWのgccコンパイラを使用するにはどうすればよいですか?
MinGWとdistutilsを構成したので、次のコマンドを使用して拡張機能をコンパイルできます。
MinGWのgccコンパイラが使用され、パッケージがインストールされます。そのために、MinGWをインストールし、次の内容のdistutils.cfgファイルを作成しました。
かっこいいですが、今はすべてのピップのメリットを利用したいと思います。同じMinGWのgccコンパイラをpipで使用する方法はありますか?したがって、これを実行すると、次のようになります。
pipはMinGWのgccコンパイラを使用し、必要に応じてCコードをコンパイルしますか?
現在、このエラーが発生します:Unable to find vcvarsall.bat
。pipは私がgccコンパイラを持っていることを知らないようです。gccコンパイラを使用するようにpipを設定するにはどうすればよいですか?
python - distutils を使用した間違った data_files の場所
distutilsのドキュメントでは、data_files のターゲット ディレクトリが相対パスの場合、ファイルはsys.prefix
. 私のシステム (Linux Mint) では、これは/usr
; ただし、data_files は代わりに にインストールされ/usr/local
ます。
クロスプラットフォームのサポートを失わずにこれを修正するにはどうすればよいですか?
python - unixen の FHS を尊重するために distutils で設定ファイルを処理するには?
というプログラムがあるとしfoo
ます。
絶対パスを使用する場合:
そしてfoo$ python setup.py --prefix=/usr/local
、私たちは持ってい/etc/foo.cfg
ます。しかし、 FHS/usr/local/etc/foo.cfg
によると、代わりに持つべきです。
相対パスを使用するとどうなりますか?
次に、デフォルトのインストール パス、つまり /usr へのインストールを使用すると、/usr/etc/foo.cfg
. また不運。
では、それを正しく行う方法は?
PS 問題が複雑になるのを避けるため、このプログラム
foo
は非 UNIX 環境では実行できないと想定しています。