把一个大的非Python文件放到sitepackages中可以吗?

2024-04-25 07:15:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我计划开发的产品将包括Python代码和zipfile(带有自定义扩展和自定义内容,其中不包括Python代码)。Python代码将进入站点包目录层次结构。我知道可以编写/生成知道zipfile的位置的自定义代码(可能通过读取包含路径的文本文件),然后在导入Python代码时运行此代码。但是,是否也可以将zipfile放到site packages目录层次结构中,这将是一个更简单的解决方案?从我所做的阅读(davidbeazley的“Python基本参考”和各种web站点),我没有看到任何人提到将大型非Python文件放入站点包,但我也没有看到任何人排除这种可能性。我倾向于避免把文件放在那里,但我只是想看看是否有一个明确的理由不这样做。你知道吗


Tags: 文件代码路径目录内容层次结构产品站点
1条回答
网友
1楼 · 发布于 2024-04-25 07:15:10

似乎可以不将这些文件放在站点包本身中,而是放在一个目录中,这个目录可以是您喜欢的任何名称,它与站点包处于同一层次结构下。(如果不完全是同级目录的话,您可以称之为“堂兄弟”目录。)正如@synthesizerpatel所提到的,distutils有一个数据文件的概念。实际上,有一个关键字“data\u files”,可以用来表示这种类型的目录。例如,您可以编写设置.py文件包含如下块:

setup(
    name="mypackage",
    version="R2014",
    description='My module',
    author='me',
    url='http://www.example.com/',
    platforms=['Linux', 'Windows', 'MacOS'],
    package_dir={'': 'dist'},
    packages=['my_package'],
    cmdclass={'build_py': BuildMyPackage},
    data_files=[('my_data', ['path/in/my/source/tree/to/some_large_file.txt'])]
)

在这种情况下,在Windows机器上执行:

^{pr2}$将在Python安装目录下创建一个目录(例如,c:\Python33\my\u data)并放置一些大的\u_文件.txt在里面。执行:^{pr3}$将创建目录C:\Users\myuser\AppData\Roaming\Python\my\u data并放置一些大的_文件.txt在那里。

以后,如果您想找到myu数据目录,可以使用distutils.sysconfig.get\u python\u lib()或site.getsitepackages包()查找系统站点包目录,或site.getusersitepackages包()以查找用户站点包目录。然后,因为您知道相对路径,所以您可以找到设置.py脚本已创建。(或者,您可以使用网站.getuserbase()而不是来自site.getusersitepackages包())不幸的是,似乎没有一种简单、规范的方法来确定安装程序是在哪些可能的目录(系统或用户)中执行的。此外,有时这些函数提供多种可能性,例如在这种情况下:

>>> site.getsitepackages()
['c:\\Python33', 'c:\\Python33\\lib\\site-packages']

因此,您可能需要添加一点自定义逻辑,例如:

  • 使用已知的相对路径搜索指定的目录, 适用于site.getsitepackages包()
  • 如果找不到,请执行相同的操作 适用于site.getusersitepackages包()
  • 如果找不到,返回“找不到”

相关问题 更多 >