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

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

新規登録して質問してみよう
ただいま回答率
85.50%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

4296閲覧

いくつかのフォルダ内で、Pythonを動かすと、'openpyxl' has no attribute 'load_workbook' エラーが出る。

yujin1202

総合スコア56

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/06/03 09:03

当方、Windows10を使っております。

<現象>
いくつかのフォルダ内で、Pythonを動かすと、下記の様なエラーが発生します。
(openpyxl に"load_workbook"と言うattributeはないと怒られます。)
================
C:\Users\user_xxx\Desktop\0603\calc>python copy1a.py
Traceback (most recent call last):
File "copy1a.py", line 1, in <module>
import openpyxl as px
<中略>
File "C:\Users\user_xxx\Desktop\0603\calc\copy.py", line 4, in <module>
wb=px.load_workbook('final.xlsx')
AttributeError: partially initialized module 'openpyxl' has no attribute 'load_workbook' (most likely due to a circular import)
================

<説明>
尚、動かしているPythonファイルは、下記です。
(エクセルのシート名を得ると言った単純なモノです。)
このcalcフォルダの中に、"copy1a.py"と"final.xlsx"の両ファイルがあります。

<copy1a.py>

import openpyxl as px wb=px.load_workbook('final.xlsx') ws=wb.worksheets[0] print(ws.title) コード

非常に不思議なのは、上記フォルダ(calc)の下に、別フォルダ(calc_real)を作成して、そこに、"copy1a.py"と"final.xlsx"をコピーして、動かすと、下記の様に
正常に動作します。
==============
C:\Users\user_xxx\Desktop\0603\calc\calc_real>python copy1a.py
Summary
==========
イメージ説明

<質問>
色々とフォルダを作成して、同じようにテストしたのですが、最下層のフォルダ(上記の例ではcalc_real)内では、pythonは動作しますが、例えば、その一つ上のファルダでテストをすると、上記エラーが ('openpyxl' has no attribute 'load_workbook' (most likely due to a circular import))が発生して動きません。

原因と対処法を教えて頂きたく。

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

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

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

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

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

guest

回答2

0

ベストアンサー

大抵は以下の問題です。

使っているファイル自身の名前がopenpyxl.pyである
使っているファイルと同じフォルダにopenpyxl.pyがある、またはopenpyxlという名前のディレクトリがある。

このような場合に、import openpyxlで読み込まれるのは、pythonのモジュールであるopenpyxlではなく、ご自身のディレクトリにあるopenpyxlとなってしまいます。

投稿2021/06/03 09:29

ppaul

総合スコア24666

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

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

yujin1202

2021/06/03 12:20

いつも御回答をありがとうございます。 御指摘の件は、御質問をさせて頂く前に、色々なサイトで言及されていたので、対応しておりました。(openpyxlと言う名前のファイルとかフォルダ、ディレクトリが無いのを確認しております。) 御指摘の様な「名前問題」は無いんですよね。。。。 これ以外の理由が考えられましたら、教えて頂きたく。 よろしくお願いいたします。
ppaul

2021/06/03 15:13

確認のために、以下を実行してみて下さい。 import openpyxl print(openpyxl.__file__) これで表示されるフルパスの中にsite-packagesはありますか?
yujin1202

2021/06/04 00:59 編集

早速の御回答をありがとうございます。 頂いたコードを、問題が発生しているフォルダーに置いて、走らせました。 はい。このフルパスの中に、site-packages がありました。 <一部抜粋> ============= File "C:\Users\user_xxx\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\__init__.py", line 6, in <module> from openpyxl.workbook import Workbook ============== 教えて頂きたいのですが、これが問題でしょうか???
jbpb0

2021/06/04 03:05

> print(openpyxl.__file__) を実行したら、その結果は普通は C:\Users\user_xxx\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\__init__.py みたいなのだけのはずだけど > File "C:\Users\user_xxx\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\__init__.py", line 6, in <module> from openpyxl.workbook import Workbook って、何をした結果ですか?
jbpb0

2021/06/04 03:18

C:\Users\user_xxx\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\__init__.py に相当する https://foss.heptapod.net/openpyxl/openpyxl/-/blob/branch/3.0/openpyxl/__init__.py を見ると、 from openpyxl.reader.excel import load_workbook とありますので、 https://foss.heptapod.net/openpyxl/openpyxl/-/blob/branch/3.0/openpyxl/reader/excel.py を見ると、たしかに「def load_workbook(...」があります 質問者さんのパソコン内のファイルで、上記の追跡がどこかで途切れてるのですかね??
jbpb0

2021/06/04 03:40

import openpyxl.reader as pxrd print(pxrd.__file__) とか、 import openpyxl.reader.excel as pxex print(pxex.__file__) とかやってみた時の結果は、変なもの指してないですか? (もちろん、エラー出るディレクトリで実行して)
yujin1202

2021/06/04 06:26

御回答をありがとうございます。 頂いたコードを、test2.pyとして、エラーの出るディレクトリで実行してみました。 <test2.py> =============== import openpyxl.reader as pxrd print(pxrd.__file__) ================= 追加情報なのですが、上記の質問では、「最下層のフォルダーでのみ、pyファイルが動いた」みたいな記載になっておりますが、分かってきた事として、最下層か中間かは関係ない事が判明しました。(中間フォルダでも動く時は動くし、別の中間フォルダでは動かないと言う事が判明しました。) 1.エラーの出るディレクトリで実行した場合。 *********** C:\Users\user_xxx\Desktop\202105>python test2.py Traceback (most recent call last): File "test2.py", line 1, in <module> import openpyxl.reader as pxrd File "C:\Users\user_xxx\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\__init__.py", line 6, in <module> from openpyxl.workbook import Workbook File "C:\Users\user_xxx\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\workbook\__init__.py", line 4, in <module> from .workbook import Workbook File "C:\Users\user_xxx\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\workbook\workbook.py", line 4, in <module> from copy import copy File "C:\Users\user_xxx\Desktop\202105\copy.py", line 4, in <module> wb=px.load_workbook('final.xlsx') AttributeError: partially initialized module 'openpyxl' has no attribute 'load_workbook' (most likely due to a circular import) 2.正常にpyファイルが動くディレクトリで実行した場合。 ***************** C:\Users\user_xxx\Desktop\sample202106>python test2.py C:\Users\user_xxx\AppData\Local\Programs\Python\Python38\lib\site-packages\openpyxl\reader\__init__.py 3. 先程、openpyxlをアンインストールしてからインストールし直したのですが、やはり現象は変わらないです。(pyファイルが動くフォルダと動かないフォルダがある。) ドツボにハマっている感じがします。 python自体を再インストールとかになるのでしょうか? よろしくお願いいたします。
Bull

2021/06/04 07:30

おそらくですが、"C:\Users\user_xxx\AppData\Local\Programs\Python\Python38\Lib\site-packages\openpyxl\workbook\workbook.py" で "import copy" をしていますが、"C:\Users\user_xxx\Desktop\202105\copy.py" を読込んでいるために、おかしくなっているようです。 とりあえず "C:\Users\user_xxx\Desktop\202105\copy.py" の名前を変えてみては如何でしょうか。
jbpb0

2021/06/04 10:19

なるほど print(openpyxl.__file__) の結果が、何であんな変な表示されたか分からなかったけど、 > <一部抜粋> で重要なところが削除されてたんだな 今回の print(pxrd.__file__) の結果は全部コピペしてくれたから、状況が分かった Bullさんの指摘がビンゴでしょうね
yujin1202

2021/06/04 12:38

ありがとうございました。 ダメなフォルダの中に、確かに、"copy.py"と言うファイルがありました。(動かしてたファイルは、copy1a.pyと言う名前でしたが、テスト時に作ったものが残っておりました。) ダメなフォルダから、このcopy.pyを削除したら、正常に動きました! 本当にありがとうございました。
jbpb0

2021/06/04 13:09 編集

質問者さん Traceback... 以降を全部書いてくれないと、状況が把握できませんので、今後もし同様なことが起きて、質問することになったら、 > 1.エラーの出るディレクトリで実行した場合。 のように、省略せずに書いてください
guest

0

おはようございます。

問題文読ませていただきました。

most likely due to a circular importと書いてある通り、同directory内へopenpyxl.pyがある or openpyxlフォルダがあるが怪しいですね。

循環参照に関しては、こちらの記事がまとまっております。ご確認くださいませ。????‍♂️
Pythonでファイル名が悪くてimportでハマった

投稿2021/06/04 00:43

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

yujin1202

2021/06/04 00:55

コメントをありがとうございます。 はい。上の質問には書かなかったのですが、御指摘の記事は、質問をさせて頂く前にネットで読み、対応しております。(つまり、名前重複は発生しないです。) 他に考えられる要因がございましたら、引き続き、教えて頂きたく。
退会済みユーザー

退会済みユーザー

2021/06/04 01:20

すみません。一階層下では動くことを考えると、それ以外に考えられることがわからないです。 私の方ではお力になれず、申し訳ございません。 またわからないこととかありましたら、気軽にご相談ください〜
yujin1202

2021/06/04 02:44

はい。ありがとうございます。今後とも、よろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問