我有如下的包结构:
.
├── my_app
│ ├── app.py
│ ├── cli.py
│ ├── db.py
│ └── __init__.py
├── setup.py
├── tests
│ ├── data
│ │ └── foobar.gz
│ ├── test_app.py
│ └── test_database.py
└── tox.ini
在test_app.py
中,我这样做:
import pkg_resources
path = '../tests/data/foobar.gz'
full_path = pkg_resources.resource_filename(__name__, path)
现在我看到了这条消息:
/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py:1145:
DeprecationWarning:使用..或者资源路径中的绝对路径是不允许的,并且会在将来的版本中引发异常。self,resource_name
我应该怎么做呢?
(我也可以更改包的结构,但我希望将测试数据保留在测试中-运行应用程序不需要这些数据)
发布于 2019-05-28 02:20:15
要在将测试文件名传递给pkg_resources
时获得测试资源,您需要将文件中的路径用于测试,如下所示:
import pkg_resources
path = 'data/foobar.gz'
full_path = pkg_resources.resource_filename(__name__, path)
对于pytest,我也在conftest.py
中使用了这个模式
@pytest.fixture('session')
def test_data_dir():
return os.path.join(os.path.dirname(__file__), 'data')
我可以使用os.path.join()
轻松获取任何测试数据。
发布于 2019-05-14 14:00:17
试用os模块
import os.path
source_folder = os.getcwd()
path = os.path.join(source_folder, 'data/foobar.gz')
发布于 2019-05-27 19:22:40
要获取相对于脚本目录的路径,请尝试使用脚本位置本身:
import sys
print(sys.argv[0])
您可以使用os.path.dirname()
获取包含脚本的目录
import os
import sys
print(os.path.dirname(sys.argv[0]))
然后,os.path.join()
可能有助于创建任意路径:
import os
import sys
print(os.path.join(os.path.dirname(sys.argv[0]), "some_subdir"))
哈!
https://stackoverflow.com/questions/56123724
复制相似问题