-
Notifications
You must be signed in to change notification settings - Fork 45
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Swoole AI Assistant] translate to ja
- Loading branch information
Showing
26 changed files
with
1,423 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
{"latest_commit":"8139ba3ccb9fd18969960c4574dd3c7dde7ebb28"} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
日本語訳 | ||
---- | ||
|
||
**中文文書** | ||
==== | ||
|
||
- [PHPでPythonモジュールを呼び出す](php/tutorial.md) | ||
- [PythonでPHP関数を呼び出す](python/tutorial.md) | ||
- [開発パス](roadmap.md) | ||
|
||
**PHP拡張** | ||
---- | ||
* [ビルドインストール](php/build.md) | ||
* [言語コア](php/core.md) | ||
* [組み込みタイプ](php/object.md) | ||
* [例外処理](php/exception.md) | ||
* [整数型数字](php/int.md) | ||
* [回调関数](php/fn.md) | ||
* [メモリコピー](php/memory.md) | ||
* [パフォーマンステスト](benchmark.md) | ||
* [IDEヒント](php/composer.md) | ||
* [ソケットAPI](php/socket.md) | ||
* [Pythonクラスを継承する](php/inherit.md) | ||
|
||
**Pythonモジュール** | ||
|
||
--- | ||
|
||
- [関数リスト](python/function.md) | ||
- [オブジェクト操作](python/object.md) | ||
- [文字列操作](python/string.md) | ||
- [配列操作](python/array.md) | ||
- [クラス操作](python/class.md) | ||
- [参照タイプ](python/reference.md) | ||
- [メモリコピー](php/memory.md) | ||
- [モジュール封装](python/module.md) | ||
|
||
**チュートリアル** | ||
|
||
--- | ||
|
||
- [phpy:PHPとPythonの相互呼び出しライブラリ、PHPにPythonエコシステムを導入する](https://zhuanlan.zhihu.com/p/670373512) | ||
- [Ubuntu 18.04でPHP-8.3をビルドしてphpyをインストールする](https://mp.weixin.qq.com/s/q_-keG3clvs7Hii-oEW3RQ) | ||
- [phpy:PHPとPythonエコシステムを接続する](https://zhuanlan.zhihu.com/p/671645003) | ||
- [PHPがphpyを通じてオープンソースの大モデルプラットフォーム魔塔ModelScopeを呼び出す方法](https://mp.weixin.qq.com/s/p5x2XwJgPpodZI_Woa8qPA) | ||
|
||
**注意:** | ||
上記の「Pythonモジュール」の「メモリコピー」の日本語訳は「メモリコピー」のままです。なぜなら、提供されたテキストにはそのセクションの日本語訳がないためです。もし必要なら、この部分を日本語に翻訳する必要があります。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,112 @@ | ||
# ストレESSテスト | ||
圧力テストのスクリプトでは `PyDict` を作成し、それぞれ PHP コードと Python コードで 1000 万回実行して読み書きを行います。 | ||
|
||
- `PHPバージョン`:`PHP 8.2.3 (cli) (built: Mar 17 2023 15:06:57) (NTS)` | ||
|
||
- `Pythonバージョン`:`Python 3.11.5` | ||
|
||
- OS:`Ubuntu 20.04` | ||
- `GCCバージョン`:`gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)` | ||
|
||
> このテストでは 1000 万要素の `HashTable` を構築する必要があり、少なくとも 2GB以上のメモリスペースが必要です。 | ||
## PHP | ||
```php | ||
<?php | ||
|
||
$dict = new PyDict(); | ||
const COUNT = 10000000; | ||
|
||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$dict['key-' . $n] = $n * 3; | ||
} | ||
echo 'dict set: ' . round(microtime(true) - $s, 6) . ' 秒' . PHP_EOL; | ||
|
||
$c = 0; | ||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$c += $dict['key-' . $n]; | ||
} | ||
echo 'dict get: ' . round(microtime(true) - $s, 6) . ' 秒' . PHP_EOL; | ||
``` | ||
|
||
## Python | ||
```python | ||
import time | ||
|
||
my_dict = {} | ||
COUNT = 10000000 | ||
|
||
n = COUNT | ||
start_time = time.time() | ||
|
||
for i in range(n): | ||
my_dict["key-" + str(i)] = i * 3 | ||
|
||
elapsed_time = time.time() - start_time | ||
|
||
print(f"dict set: {elapsed_time:.6f} 秒") | ||
|
||
n = COUNT | ||
|
||
total = 0 | ||
start_time_get = time.time() | ||
for i in range(n): | ||
total += my_dict["key-" + str(i)] | ||
|
||
elapsed_time_get = time.time() - start_time_get | ||
|
||
print(f"dict get: {elapsed_time_get:.6f} 秒") | ||
``` | ||
|
||
## PHP 配列 | ||
```php | ||
<?php | ||
|
||
ini_set('memory_limit', '2G'); | ||
$dict = []; | ||
const COUNT = 10000000; | ||
|
||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$dict['key-' . $n] = $n * 3; | ||
} | ||
echo 'array set: ' . round(microtime(true) - $s, 6) . ' 秒' . PHP_EOL; | ||
|
||
$c = 0; | ||
$n = COUNT; | ||
$s = microtime(true); | ||
while ($n--) { | ||
$c += $dict['key-' . $n]; | ||
} | ||
echo 'array get: ' . round(microtime(true) - $s, 6) . ' 秒' . PHP_EOL; | ||
``` | ||
|
||
##結果の比較 | ||
|
||
```shell | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php dict.php | ||
dict set: 4.663758 秒 | ||
dict get: 3.980076 秒 | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ php array.php | ||
array set: 1.578963 秒 | ||
array get: 0.831129 秒 | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ python dict.py | ||
dict set: 5.321664 秒 | ||
dict get: 4.969081 秒 | ||
(base) htf@swoole-12:~/workspace/python-php/docs/benchmark$ | ||
``` | ||
|
||
Pythonテストを基準に: | ||
|
||
| スクリプト名 | Set | Get | | ||
|:----------|:----:|-----:| | ||
| dict.php | 114% | 125% | | ||
| array.php | 337% | 599% | | ||
|
||
- `phpy`はPHPコードでPyDictを書くパフォーマンスが原生Pythonの14%高く、読み取りのパフォーマンスは25%高い | ||
- PHPで書く配列のパフォーマンスはPythonのDictを書くパフォーマンスの237%高く、読み取りはほぼ500%高い |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,128 @@ | ||
# Windows での構築 | ||
|
||
> PHP-8.1 以降りのバージョンのみサポートされています。 | ||
## PHP開発環境 | ||
|
||
参考:[https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2](https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2) | ||
|
||
- Visual C++ 16.0 をインストールしてください。[https://aka.ms/vs/16/release/vs_buildtools.exe](https://aka.ms/vs/16/release/vs_buildtools.exe) | ||
|
||
- php-sdk-binary-toolsをインストールしてください。[https://github.com/php/php-sdk-binary-tools](https://github.com/php/php-sdk-binary-tools) | ||
|
||
- PHPソースコードをダウンロードしてください。 | ||
|
||
- 依存ライブラリをインストールしてください。[https://windows.php.net/downloads/php-sdk/deps/](https://windows.php.net/downloads/php-sdk/deps/) | ||
|
||
> PHP関連のすべてのファイルは `d:\workspace` ディレクトリにインストールされます。 | ||
## Python開発環境 | ||
|
||
- Pythonをインストールしてください。[https://www.python.org/downloads/windows/](https://www.python.org/downloads/windows/) | ||
|
||
- `Path`環境変数を設定し、`d:\python`を追加してください。Windowsターミナルで`Python -V`を実行して確認します。 | ||
|
||
- `PYTHONHOME`環境変数を`d:\python`に設定してください。 | ||
|
||
> Pythonは`d:\python`ディレクトリにインストールされます。 | ||
```shell | ||
C:\WINDOWS\system32>python -V | ||
Python 3.12.1 | ||
|
||
echo %Path% | ||
echo %PYTHONHOME% | ||
``` | ||
|
||
## 構築ディレクトリ | ||
|
||
```shell | ||
cd D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0 | ||
phpsdk-vs16-x64.bat | ||
``` | ||
|
||
成功した後は、このターミナルで`php-src`ディレクトリに入ります。 | ||
|
||
```shell | ||
cd D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5 | ||
phpsdk_deps -u | ||
``` | ||
|
||
拡張プロジェクトは`php-src`の`ext`ディレクトリに置かれます。例えば:`D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\ext\phpy`。また、`mklink`コマンドを使用してシンボリックリンクを作成することもできます。 | ||
|
||
## 構築設定 | ||
|
||
```shell | ||
$ buildconf --force | ||
Rebuilding configure.js | ||
Now run 'configure --help' | ||
configure --with-openssl --with-mysqlnd --with-mysqli --enable-mbstring --enable-pdo --with-pdo-mysql --with-curl --enable-cli --enable-opcache --disable-zts --enable-phpy=shared | ||
``` | ||
|
||
`--enable-phpy=shared`は`phpy`拡張を有効にし、`.dll`動的リンクライブラリとしてコンパイルすることを意味します。 | ||
|
||
成功した後は、以下のような出力が得られます。 | ||
|
||
```shell | ||
... | ||
|
||
Generating main/config.w32.h | ||
Generating phpize | ||
Done. | ||
|
||
|
||
Enabled extensions: | ||
----------------------- | ||
| Extension | Mode | | ||
----------------------- | ||
| date | static | | ||
| hash | static | | ||
| json | static | | ||
| pcre | static | | ||
| phpy | shared | | ||
| reflection | static | | ||
| spl | static | | ||
| standard | static | | ||
----------------------- | ||
|
||
|
||
Enabled SAPI: | ||
------------- | ||
| Sapi Name | | ||
------------- | ||
| cli | | ||
------------- | ||
|
||
|
||
--------------------------------------- | ||
| | | | ||
--------------------------------------- | ||
| Build type | Release | | ||
| Thread Safety | No | | ||
| Compiler | Visual C++ 2019 | | ||
| Architecture | x64 | | ||
| Optimization | PGO disabled | | ||
| Native intrinsics | SSE2 | | ||
| Static analyzer | disabled | | ||
--------------------------------------- | ||
|
||
|
||
Type 'nmake' to build PHP | ||
|
||
D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5 | ||
$ | ||
``` | ||
|
||
## 拡張の構築 | ||
```shell | ||
nmake clean | ||
nmake | ||
``` | ||
|
||
## 二進体のパッケージ化 | ||
|
||
```shell | ||
nmake snap | ||
``` | ||
|
||
成功した後は、`D:\workspace\php-sdk\php-sdk-binary-tools-2.2.0\phpdev\vs16\x64\php-8.1.5\x64\Release`に`php-8.1.5-nts-Win32-vs16-x64.zip`が生成されます。 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,67 @@ | ||
# Linux/macOS/Unixでのコンパイル | ||
|
||
> 現在は `Python 3.10` 以降のバージョンのみサポートされています | ||
|
||
- `config.m4` を編集して `Python` のパスを設定します。デフォルトは `/opt/anaconda3`です。 | ||
|
||
|
||
```shell | ||
phpize | ||
./configure | ||
make install | ||
``` | ||
|
||
`php.ini` を編集して `extension=phpy.so`を追加します。 | ||
|
||
`php -m` を実行してリストに表示されているかどうかを確認します。`php --ri phpy` を実行して情報查看し、`php --re phpy` を実行して拡張機能で定義されているクラスや方法を查看します。 | ||
|
||
|
||
php -m | ||
---- | ||
``` | ||
php -m | ||
[PHP Modules] | ||
bcmath | ||
bz2 | ||
Core | ||
... | ||
phpy | ||
... | ||
[Zend Modules] | ||
Zend OPcache | ||
``` | ||
|
||
|
||
コンパイルパラメータ | ||
---- | ||
|
||
### `--with-python-dir` | ||
|
||
`Python` のインストールパスを指定します。例えば `/usr/bin/python` の場合は `--with-python-dir=/usr`と設定します。 | ||
`conda`で `Python` をインストールした場合は `/opt/anaconda3`と設定します。 | ||
|
||
|
||
### `--with-python-version` | ||
|
||
指定する `Python`のバージョンです。例えば `3.10`、`3.11`、`3.12`などです。デフォルトでは `$python-dir/bin/python -V`を使用してバージョンを取得します。 | ||
|
||
### `--with-python-config` | ||
|
||
`python-config`実行文件的路径を設定します。このオプションの優先度は `--with-python-dir`や `--with-python-version`よりも高いです。 | ||
|
||
```shell | ||
(base) htf@swoole-12:~/workspace/python-php$ which python3.11-config | ||
/opt/anaconda3/bin/python3.11-config | ||
(base) htf@swoole-12:~/workspace/python-php$ python3.11-config | ||
Usage: /opt/anaconda3/bin/python3.11-config --prefix|--exec-prefix|--includes|--libs|--cflags|--ldflags|--extension-suffix|--help|--abiflags|--configdir|--embed | ||
(base) htf@swoole-12:~/workspace/python-php$ ./configure --wi | ||
--with-gnu-ld --with-libdir= --without-PACKAGE --with-PACKAGE --with-php-config= --with-pic --with-python-config --with-python-dir --with-python-version --with-tags= | ||
(base) htf@swoole-12:~/workspace/python-php$ ./configure --with-python-config=python3.11-config | ||
checking for grep that handles long lines and -e... /bin/grep | ||
checking for egrep... /bin/grep -E | ||
checking for a sed that does not truncate output... /bin/sed | ||
checking for pkg-config... /usr/bin/pkg-config | ||
checking pkg-config is at least version 0.9.0... yes | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,37 @@ | ||
# IDE 自動提示 | ||
|
||
`phpy`は、IDEの自動提示機能を提供する自動生成ツールを提供しています。使用方法は以下の通りです: | ||
|
||
```shell | ||
cd phpy/tools | ||
php gen-lib.php [Python パッケージ名] | ||
``` | ||
|
||
例えば`matplotlib.pyplot`については: | ||
|
||
- 直接導入:`PyCore::import('matplotlib.pyplot')` | ||
- 推測ファイル生成:`php tools/gen-lib.php matplotlib.pyplot` | ||
|
||
また、`tools/gen-all-lib.php`を配置することで、複数のパッケージの推測ファイルを一度に生成することもできます。 | ||
|
||
## 使用方法 | ||
|
||
### 依存ファイルのインストール | ||
|
||
```shell | ||
composer require swoole/phpy | ||
``` | ||
|
||
### 自動提示器の使用 | ||
|
||
```php | ||
require dirname(__DIR__, 2) . '/vendor/autoload.php'; | ||
$plt = python\matplotlib\pyplot::import(); | ||
|
||
$x = new PyList([1, 2, 3, 4]); | ||
$y = new PyList([30, 20, 50, 60]); | ||
$plt->plot($x, $y); | ||
$plt->show(); | ||
``` | ||
|
||
![IDE 自動完成](../../images/autocomplete.png) |
Oops, something went wrong.