anaconda conda
パッケージフレームワークを使用してpython 3.6パッケージをビルドしています。 パッケージはソースファイルに関して正常に動作しているようです。 などのビルドエラーはありません。しかし、私はパッケージにいくつかの小さなCSVデータファイルを格納する新しい機能を追加しようとしています。 pandas
Anacondaパッケージの問題:内部モジュールが同じディレクトリにあるデータファイルを見つけることができません
私が遭遇している問題は、相対的な ファイルパスをパッケージ内から正しく参照できないように見えることです。だから、もし私がパッケージに入っているとJupyter
というノートで と言うとうまくいきましょう。 パスの問題は、問題自体が表示される方法のようですが、内部アドレス指定がパッケージ内でどのように処理されるかは、 とさらに関連していると思われます。
エラーメッセージは次のとおりです。
FileNotFoundError: File b'data.csv' does not exist
このエラーについての奇妙なことはdata.csv
ファイルがアクセスしようとしているのpythonファイルと同じディレクトリにあるということです。だから私は以下のpythonモジュールreader.py
がこのファイルを見つけることができないように見えないのです。
したがって、パッケージの構造とコードの最小限の例を挙げておきます。
/project
/docs
/packaging
/conda_build_files
bld.bat
build.sh
meta.yaml
/src
/data
__init__.py
reader.py
data.csv #PROBLEM AREA
__init__.py
module1.py
setup.py
README.rst
だから、問題は、ファイルreader.py
は、データフレームにcsvファイル を読み取るためにpandas
を使用していることです。 Module1
は、reader
を呼び出してデータを取得します。
ので、コードのような設定である:
##reader.py
import pandas as pd
class Reader():
def read():
return pd.read_csv('data.csv')
次にモジュール1に私がようなコードを持っている:
##module1.py
from .data.reader import Reader
import pandas as pd
def main():
dat = Reader.read()
print(dat.head())
私はdata.csv
について奇数エラーが存在しません取得していますどこだから、これはあります。今度は Reader
クラスと data.csv
ファイルが同じフォルダにあるため、この場合は相対インポートは必要ありません。はい何らかの理由で私はこれを得ます 奇妙なエラーメッセージ。
data.csv
ファイルは、MANIFEST.in
ファイルに含まれています。
私のsetup.py
はこのようです。
try:
from setuptools import setup
except ImportError:
from distutils.core import setup
setup(
name='pkg',
version='0.6.0',
description="desc",
long_description=readme + '\n\n' + history,
author="me",
author_email='me',
url='https://github.com/.../pkg',
packages=[
'pkg',
],
package_dir={'pkg':
'pyugend'},
package_data={
'mydata': ['pkg/data/*.csv'],
},
include_package_data=True,
install_requires=requirements,
license="ISCL",
zip_safe=False,
keywords='pkg',
classifiers=[
'Development Status :: 2 - Pre-Alpha',
'Programming Language :: Python :: 3.6',
],
test_suite='tests',
tests_require=test_requirements
)
そしてmeta.yaml
ファイルはかなりバニラすぎる:reader.py
が存在する場所にもかかわらず
package:
name: pkg
version: "0.6"
source:
git_url: https://github....
build:
# noarch_python: True
# preserve_egg_dir: True
entry_points:
requirements:
build:
- python
run:
- python
- numpy
- pandas
- docopt
- matplotlib
about:
license: MIT License
さて、私はあなたの作業ディレクトリについて言っているものを手に入れます。しかし、データファイルが置かれている相対ディレクトリを参照するにはどうすればいいですか?私は 'os'パッケージなどを使う必要がありますか? – krishnab
データファイルへのパスを取得する方法に関する追加情報を更新しました。 – James
これは大丈夫です。助けてくれてありがとう@James。興味深いことに、私はこれまで相対パスでこの問題に遭遇していませんでしたが、今は論理を見ることができます。それはすべて動作します。 – krishnab