2

Python モジュール 'mechanize' と 'BeautifulSoup' を単一の .py ファイルにカプセル化することは可能ですか?

私の問題は次のとおりです。mechanize と BeautifulSoup を必要とする Python スクリプトがあります。PHPページから呼び出しています。ウェブホスト サーバーは Python をサポートしていますが、モジュールがインストールされていません。だからこそやりたい。

これがばかげた質問である場合は申し訳ありません。

編集:ご回答いただきありがとうございます。これに対する解決策は、virtualenv 周辺で解決すると思います。誰かが私にこれを非常に簡単な言葉で説明してくれるほど親切でしょうか? virtualenv ページを読みましたが、まだ非常に混乱しています。もう一度ありがとう。

4

3 に答える 3

4

実際にファイルを結合したり、システム全体の場所にインストールしたりする必要はありません。ライブラリが Python スクリプト (したがって、PHP アプリ) で読み取り可能なディレクトリにあり、Python ロード パスに追加されていることを確認してください。

sys.pathPython ランタイムは、配列内のディレクトリでライブラリを検索します。PYTHONPATH環境変数を使用するか、明示的に に項目を追加することにより、実行時にその配列にディレクトリを追加できますsys.path。Python スクリプトに追加された以下のコード スニペットは、スクリプトが配置されているディレクトリを検索パスに追加し、同じ場所にあるすべてのライブラリを暗黙的にインポートできるようにします。

import os, sys
sys.path.append(os.path.dirname(__file__))
于 2009-09-18T21:17:35.013 に答える
2

virtualenv を調べて、ローカルの python インストールを作成します。ここに、BeautifulSoup と必要な他のすべてのライブラリをインストールできます。

http://pypi.python.org/pypi/virtualenv

于 2009-09-18T21:43:36.200 に答える
0

いいえ、(一般的には) できません。これを行うと、Python が使用するモジュール検索方法 (ファイルとディレクトリ) が破壊されるためです。ハックすれば、実際のファイルシステムのレイアウトがなくてもモジュール階層を生成できると思いますが、これは巨大なハックであり、おそらく次のようなものです。

>>> sha=types.ModuleType("sha")
>>> sha
<module 'sha' (built-in)>
['__doc__', '__name__']
>>> sha.foo=3
>>> sha.zam=types.ModuleType("zam")
>>> sha.foo
3
>>> dir(sha)
['__doc__', '__name__', 'foo', 'zam']

ただし、いずれにせよ、このレイアウトを作成し、適切な名前の識別子に格納するコードを生成する必要があります。

おそらく、.egg ファイルの使い方を学ぶ必要があります。これらは、.jar ファイルなどのライブラリを含む一意の集合体です。

于 2009-09-18T21:48:04.620 に答える