Metasequoia BBS

| 新規投稿 | 通常表示 | ツリー表示 |
状態
タグ
キーワード
[7221] Python 3.6で変更点? / たけし
[不具合報告] 返信
Python3.4では正常にモジュールが読み込めていたのに、同じpyファイルがPython3.6.1では以下のようなエラーが出ます。

Failed to execute a script in line 82, _path_stat, '<frozen importlib._bootstrap_external>'.
Attribute not found.
module 'version' has no attribute 'check'

サンプルのモジュールファイルversion.pyはこちらです。

def check():
    print(sys.version)

サンプルのファイルtest.pyはこちらです。

import version

version.check()

おそらくPython自体のバージョンアップで変更があったのではないでしょうか?
2017-09-06 15:31
[7222] Re: Python 3.6で変更点? / 管理者
バージョン間の違いなど細かいことまではわかりませんが、モジュール内でとりあえず
import sys
しておけば大丈夫なようです。

スクリプトエディタから実行するときは内部で自動的にimport sysしているので記載はいらないのですが、分離されたモジュールではそれぞれimportが必要ということではないでしょうか?
Pythonの組み込みやモジュールに精通しているわけではないので答えとして正確かどうかはわかりませんが。
2017-09-06 16:53
[7223] Re: Python 3.6で変更点? / たけし
>バージョン間の違いなど細かいことまではわかりませんが、モジュール内でとりあえず
>import sys
>しておけば大丈夫なようです。

すみません、サンプルが悪かったです。
僕のpyファイルはちょっと長いので載せませんが、Metasequoia4.5まで動いていたpyモジュールが、Metasequoia4.6では以下のようなエラーが出ます。

Failed to execute a script in line 1, 'test.py'.
Module not found.
No module named 'version'
2017-09-06 17:22
[7225] Re: Python 3.6で変更点? / 管理者
パスが通っているか
print(sys.path)
で確認してみてください。

既存のファイルを開いたか名前をつけて保存した状態なら、標準ライブラリ用のフォルダの他に、そのpyファイルがあるフォルダもパスに含まれていると思います。
2017-09-06 17:59
[7226] Re: Python 3.6で変更点? / たけし
>パスが通っているか
>print(sys.path)
>で確認してみてください。

Metasequoia4.6.1起動後に最初に実行したモジュールのパスしかありません。
2つ目以降のスクリプトのモジュールのパスを反映するにはどうすればいいでしょうか?
2017-09-06 20:04
[7227] Re: Python 3.6で変更点? / 管理者
>2つ目以降のスクリプトのモジュールのパスを反映するにはどうすればいいでしょうか?

パス自体を変更する方法は用意していませんが、
・pyファイルと同じフォルダ
・標準ライブラリのあるPython\Libフォルダ
のどちらかにモジュールを置けば大丈夫だと思います。
(後者だとPrograms Files以外の書き込み可能なフォルダに本体をインストールしておくほうがいいかもしれません)
2017-09-07 12:11
[7228] Re: Python 3.6で変更点? / たけし
>パス自体を変更する方法は用意していませんが、

では、Python3.4からパスはノータッチなんですか?
じゃあいずれ最新版のPythonで改善されたら、対応お願いいたします。
2017-09-07 19:10