gpt4 book ai didi

python - 如何正确分发带有数据文件的 pip 包?

转载 作者:行者123 更新时间:2023-12-04 15:51:32 27 4
gpt4 key购买 nike

我有以下软件包要分发:

mymodule/
data/
1.txt
mymodule/
__init__.py
tests/
test_mymodule.py
setup.py

为了在 vitualenv 下安装它,我应用了这个命令:
pip install .

一切都安装得很好,但是我的数据文件的路径被破坏了。
>>> from mymodule import get
>>> print(get())
...
FileNotFoundError: [Errno 2] No such file or directory: '/home/alexander/Stuff/pip_example/mymodule_test/venv/lib/python3.5/site-packages/mymodule/../data/1.txt'

我做了一个研究,发现文件夹 data是在导致错误的 virtualenv 文件夹的根目录中创建的。我应该如何改进我的代码以保持我的测试正常工作并获得数据文件的正确路径?

文件内容:

数据/1.txt
yes

我的模块/__init__.py
import os

src = os.path.join(
os.path.dirname(__file__),
'../data/1.txt'
)

def get():
with open(src) as f:
return f.read().strip()

测试/test_mymodule.py
import unittest
import mymodule

class MymoduleTest(unittest.TestCase):
def test_get(self):
s = mymodule.get()
self.assertEqual(s, "yes")

setup.py
from distutils.core import setup

data_files = [
('data', ['data/1.txt'])
]

setup(
name='mymodule',
version='0.0',
packages=['mymodule'],
data_files=data_files,
)

我是打包 Python 模块的新手。请帮我解决这个问题。

==================================================== ====================

我发现我需要使用 sys.prefix访问 virtualenv 的根目录。换句话说,如果我编辑 我的模块.__init__.py 这样一切都会正常工作:
import os
import sys

src = os.path.join(sys.prefix, 'data/1.txt')

def get():
with open(src) as f:
return f.read().strip()

但之后测试失败并出现错误:
FileNotFoundError: [Errno 2] No such file or directory: '/usr/data/1.txt'

这是因为 sys.prefix/usr没有激活 virtualenv。所以我想我需要一种不同的方法来改进包。

最佳答案

  • 安装软件包时检查您的文件是否正确分发。
  • sys.prefix不会找到“你的”包裹。 __file__模块的属性指向 __init__.py文件。您可以将其用于基本路径,如下所示:
    import os
    import mymodule

    src = os.path.join(os.dirname(mymodule.__file__), 'data/1.txt')

    def get():
    with open(src) as f:
    return f.read().strip()
  • 关于python - 如何正确分发带有数据文件的 pip 包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47577762/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com