私はPython 3.5.1で作業していますCentOS Linux 7.3.1611(コア)オペレーティングシステム。
私はPyTorchを使用しようとしていますが、 このチュートリアル で始めています。
残念ながら、この例の4行目では問題が発生します。
>>> torch.Tensor(5, 3)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'torch' has no attribute 'Tensor'
私はこのエラーを理解することはできません...もちろんトーチでは、「トーチ」には属性「テンソル」があります。同じコマンドがトーチでも機能します。
この問題を解決するにはどうすればよいですか?
実行しているPythonバイナリには、torch
がインストールされていません。 doesモジュール検索パスにtorch
という名前のディレクトリがあり、 namespace package として扱われます=:
_$ pwd
/some/path
$ python3 -c 'import torch; print(torch); print(torch.__path__)'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'torch'
$ mkdir torch
$ python3 -c 'import torch; print(torch); print(torch.__path__)'
<module 'torch' (namespace)>
_NamespacePath(['/some/path/torch'])
_
モジュール検索パスにある___init__.py
_ファイルが存在しないディレクトリは、名前空間として扱われ、他のPythonモジュールまたはパッケージは提供されませんその名前では、検索パスに沿った他の場所で検出されます。
これは、Pythonバイナリにtorch
がインストールされている場合、ローカルtorch
ディレクトリが存在するかどうかは関係ないことを意味します。
_$ ls -ld torch/
drwxr-xr-x 2 mjpieters users 68 Nov 23 13:57 torch/
$ mkdir -p additional_path/torch/
$ touch additional_path/torch/__init__.py
$ PYTHONPATH="./additional_path" python3 -c 'import os.path as p, sys; print(*(t for t in (p.join(e, "torch") for e in sys.path) if p.exists(t)), sep="\n")'
torch
/some/path/additional_path/torch
$ PYTHONPATH="./additional_path" python3 -c 'import torch; print(torch); print(torch.__path__)'
<module 'torch' from '/some/path/additional_path/torch/__init__.py'>
['/some/path/additional_path/torch']
_
上記は_sys.path
_が最初にtorch
ディレクトリーをリストし、その後に_additional_path/torch
_が続きますが、後者をインポートしようとするとtorch
モジュールとしてロードされることを示しています。 Pythonは、名前空間パッケージをロードする前にトップレベルのモジュールとパッケージを優先するためです。
現在のPythonバイナリにトーチを正しくインストールする必要があります。 project homepage ;をご覧ください。 pip
を使用するときは、代わりに_-m
_スイッチでPythonバイナリを使用することができます。
_python3.5 -m pip install http://download.pytorch.org/whl/cu80/torch-0.2.0.post3-cp35-cp35m-manylinux1_x86_64.whl
python3.5 -m pip install torchvision
_
したがって、ホームページの指示で使用する_pip3
_を_python3.5 -m pip
_に置き換えます。 _python3.5
_は、Pythonバイナリへのフルパスにすることもできます。
最新バージョンの正しい_download.pytorch.org
_ URLを使用してください。
ディレクトリを脇に移動する必要はありませんが、移動したい場所がわからない場合は、上で示したようにprint(torch.__path__)
を使用してください。
繰り返しますが、doがローカルtorch
ディレクトリに___init__.py
_ファイルを持っている場合、それは通常のパッケージになり、 pip
によってインストールされたパッケージを通常の_site-packages
_の場所にマスクします。そのようなパッケージ、またはローカルの_torch.py
_シングルファイルモジュールがある場合は、それらの名前を変更する必要があります。その場合、診断情報は異なって見えます。
_$ pwd
/some/path
$ python3 -c 'import torch; print(torch); print(torch.__path__)'
Traceback (most recent call last):
File "<string>", line 1, in <module>
ModuleNotFoundError: No module named 'torch'
$ mkdir torch
$ touch torch/__init__.py # make it a package
$ python3 -c 'import torch; print(torch); print(torch.__path__)'
<module 'torch' from '/some/path/torch/__init__.py'>
['/some/path/torch']
$ rm -rf torch/
$ touch torch.py # make it a module
$ python3 -c 'import torch; print(torch); print(torch.__file__)'
<module 'torch' from '/some/path/torch.py'>
/some/path/torch.py
_
違いに注意してください。上記の名前空間パッケージは<module 'name' (namespace)>
を使用し、通常のパッケージは_)
__, while a plain module uses
_ `を使用します。
そのようなパッケージとモジュール(名前空間パッケージではない)が最初に検出され、検索が停止します。見つかったパッケージまたはモジュールが必要なものではない場合、それらを脇に移動するか、名前を変更する必要があります。
ノートブックはpython2
で実行されているようです。
ノートブックファイル (テキストエディターで開く)のmetadata
セクションを参照してください。
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
}
[〜#〜] fix [〜#〜]
1。 ipython/jupyterのpython3.5
カーネルがインストールされていることを確認します。python3.5 -m ipykernel install --name python3.5.1
2。 jupyter notebook
を実行し、ノートブックのカーネルバージョンを変更します。
または<notebook.ipynb>
を直接編集します(推奨されません):
"metadata": {
"kernelspec": {
"display_name": "Python 3.5.1",
"language": "python",
"name": "python3.5.1"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.5.1"
}
}