質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

3183閲覧

pythonでcython

kohekoh

総合スコア140

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/07/10 13:35

http://www.geocities.jp/penguinitis2002/computer/programming/Python/cython/cython.html

このサイトを参考にcythonのサンプルを動かそうとしています
サンプルコードは以下の通りです
ここで、
python setup.py build_ext --inplace
と実行すると

python

1cythonfn.pyx 2 3def calculate_z(maxiter, zs, cs): 4 """Calculate output list using Julia update rule""" 5 output = [0] * len(zs) 6 for i in range(len(zs)): 7 n = 0 8 z = zs[i] 9 c = cs[i] 10 while n < maxiter and abs(z) < 2: 11 z = z * z + c 12 n += 1 13 output[i] = n 14 return output 15-------------------------------------------------------------- 16setup.py 17 18from distutils.core import setup 19from distutils.extension import Extension 20from Cython.Distutils import build_ext 21 22# for notes on compiler flags e.g. using 23# export CFLAGS=-O2 24# so gcc has -O2 passed (even though it doesn't make the code faster!) 25# http://docs.python.org/install/index.html 26 27setup( 28 cmdclass={'build_ext': build_ext}, 29 ext_modules=[Extension("calculate", ["cythonfn.pyx"])] 30---------------------------------------------------------------- 31実行結果 32 33Traceback (most recent call last): 34 File "setup.py", line 12, in <module> 35 ext_modules=[Extension("calculate", ["cythonfn.pyx"])] 36File… 37File… 38UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence

このようになります
なにが原因でしょうか
おしえてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

YouheiSakuraiさんの指摘の通り、ソースコードの文字コードの問題だと思います。

Pythonファイルの先頭に

python

1#coding: utf-8

のようなコーディング設定が入っていないのでは?
UTF-8 BOMありなら

python

1#coding: utf-8_sig

になるんですかね?
Pythonでは一般的にutf-8(BOMなし)が使われています、無用なトラブルを避けたいのであればソースコードはutf-8(BOMなし)で保存することをオススメします。

たぶん、エディタにウインドウズのメモ帳使っているんですかね?
まず、AtomとかVSCodeとかまともなエディタをインストールすることをおすすめします。

投稿2017/07/11 09:42

pashango2

総合スコア930

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kohekoh

2017/07/11 09:55

回答ありがとうございます atomを使っています また、このコードはpython3.6でやっているので 最初のコーディングの設定はいれなくていいとおもっているのですが… どうでしょうか
pashango2

2017/07/11 09:57

いえ、コードの中に日本語があるなら必須です。 これはPythonのバージョンに関係なく必須だと思います。
kohekoh

2017/07/11 10:00

コーディングの設定を入力しましたが 同じエラーがでてきます…
pashango2

2017/07/11 10:08

cythonが1行目のcodingを見てない可能性がありますね、BOMなしでセーブしてみてください。
kohekoh

2017/07/11 10:17

テキストエディタはatomですが bomなしでセーブというのはどうやってするのですか
pashango2

2017/07/11 10:21

えーと、.pyxをAtomで開いている時に、右下に"UTF-8"とか表示されていませんか? "UTF-8"以外であれば、そこをクリックすると文字コードが洗濯できるようになります。
pashango2

2017/07/11 10:26

AtomはBOMを操作できないみたいですね、BOMありだとBOMありで保存するようです。 pyxには日本語文字はありませんよね? メモ帳でShift JISで保存してください、それでUTF8のBOMなしになると思います。
kohekoh

2017/07/11 10:54

メモ帳で普通に保存もしてみて terapadでbomなしにできるということだったので それでやってみたりしたのですが 結果はかわらずでした
pashango2

2017/07/11 10:59 編集

0xef というコードはBOMコードです、エラー内容を見ると0xefというコードでデコードエラーがでています。 どこかのファイルがBOM付きなのが原因なのは間違いないのですが・・・ setup.pyなど全てのファイルの文字コードをutf-8のBOMなしにし、1行目もcoding: utf-8にしても同じエラーが出ますか?
kohekoh

2017/07/11 11:13

やってるのですが、なりません… 全く同じコードが何度もでてきます
kohekoh

2017/07/11 11:42

改行の仕方は関係ないですよね crlfになっているのですが
pashango2

2017/07/11 12:04

改行は関係ありません。 ディレクトリやファイルなど全て作り直しても、同じエラーが出ますか?
kohekoh

2017/07/11 12:34

新たなディレクトリに新たなファイルをterapadで作りましたが 全く同じです…
kohekoh

2017/07/11 12:43

Traceback (most recent call last): File "setup.py", line 12, in <module> ext_modules = ext_modules File "C:\Users\AppData\Local\conda\conda\envs\anaconda\lib\distutils\core.py", line 121, in setup dist.parse_config_files() File "C:\Users\AppData\Local\conda\conda\envs\anaconda\lib\distutils\dist.py", line 395, in parse_config_files parser.read(filename) File "C:\Users\AppData\Local\conda\conda\envs\anaconda\lib\configparser.py", line 697, in read self._read(fp, filename) File "C:\Users\AppData\Local\conda\conda\envs\anaconda\lib\configparser.py", line 1015, in _read for lineno, line in enumerate(fp, start=1): UnicodeDecodeError: 'cp932' codec can't decode byte 0xef in position 0: illegal multibyte sequence 念のため、エラーの全体像を載せておきます
pashango2

2017/07/12 01:38

見れば見るほど.pyxがBOM付きなエラーな気がします。 念のため、日本語パスは通ってませんよね?
kohekoh

2017/07/12 01:44

c:\user… のとこに日本語がはいってるかっていうことですかね? それだったら通ってないです
magichan

2017/07/12 02:49

横から失礼します。 ログの内容を見る限り、configparser.pyにてエラーが起こっておりますので、 - setup.py と同じディレクトリに setup.cfg がある - HOMEディレクトリに pydistutils.cfg がある のどちらかで、そのファイルがBOM付きなのではないでしょうか。
pashango2

2017/07/12 02:49

configparserがエラーですね、これはiniファイルをパースするモジュールです。 .iniファイルをUTF8のBOM有りで保存したという心当たりはありますか?
pashango2

2017/07/12 02:50

> magichan ありがとうございます、それですね!
magichan

2017/07/12 02:55

すみません抜けてました。 あと - anaconda/Lib/distutils/distutils.cfg にも設定ファイルを置くことも出来るようです。
kohekoh

2017/07/12 03:08

なるほど! いままでそれをメモ帳で書いてたからだめだったってことですかね ちなみに次はこんなエラーが… running build_ext skipping 'cythonfn.c' Cython extension (up-to-date) building 'calculate' extension C:\MinGW\bin\gcc.exe -mdll -O -Wall -DMS_WIN64 "-IC:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include" "-IC:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include" -c cythonfn.c -o build\temp.win-amd64-3.6\Release\cythonfn.o In file included from C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include/Python.h:65:0, from cythonfn.c:4: C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include/pytime.h:112:5: warning: 'struct timeval' declared inside parameter list _PyTime_round_t round); ^ C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include/pytime.h:112:5: warning: its scope is only this definition or declaration, which is probably not what you want C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\include/pytime.h:117:5: warning: 'struct timeval' declared inside parameter list _PyTime_round_t round); ^ writing build\temp.win-amd64-3.6\Release\calculate.cp36-win_amd64.def C:\MinGW\bin\gcc.exe -shared -s build\temp.win-amd64-3.6\Release\cythonfn.o build\temp.win-amd64-3.6\Release\calculate.cp36-win_amd64.def "-LC:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\libs" "-LC:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\PCbuild\amd64" -lpython36 -lmsvcr140 -o "C:\Users\ユーザ名\Dropbox\prg\make_tips\calculate.cp36-win_amd64.pyd" c:/mingw/bin/../lib/gcc/mingw32/5.3.0/../../../../mingw32/bin/ld.exe: C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\libs/python36.lib(python36.dll): Recognised but unhandled machine type (0x8664) in Import Library Format archive C:\Users\ユーザ名\AppData\Local\conda\conda\envs\anaconda\libs/python36.lib: error adding symbols: File format not recognized collect2.exe: error: ld returned 1 exit status error: command 'C:\\MinGW\\bin\\gcc.exe' failed with exit status 1
pashango2

2017/07/12 03:37

メモ帳でUTF8でセーブするとBOMを付けます、本当に痛い目に会いますからやめたほうがいいです。 コメント欄が長くなると辛いので、このエラーは別の質問として投稿してください。
guest

0

BOM付きのUTF-8でソースコードが保存されている事が原因なんだと思います。ソースコードのエンコーディングをBOMなしのUTF-8に変更する(もしくはPythonのバージョンを3.6にする)必要があります。

投稿2017/07/10 15:57

YouheiSakurai

総合スコア6142

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kohekoh

2017/07/11 01:37

anadondaで実装しているのですが pythonは3.6.1です
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問