【发布时间】:2023-03-14 22:51:01
【问题描述】:
安装后,我想对安装创建的一些配置和数据文件进行软链接。
如何确定从包的 setup.py 中安装的新包文件的位置?
我最初对路径“/usr/local/lib/python2.7/dist-packages”进行了硬编码,但是当我尝试使用虚拟环境时,它就坏了。 (由 virtualenv 创建。)
我尝试了 distutils.sysconfig.get_python_lib(),它在 virtualenv 中工作。但是,当安装在真实系统上时,它会返回“/usr/lib/python2.7/dist-packages”(注意“本地”目录不存在。)
我也试过 site.getsitepackages():
从基础环境运行 Python shell:
导入网站
site.getusersitepackages()
'/home/sarah/.local/lib/python2.7/site-packages'
site.getsitepackages()
['/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
从虚拟环境“testenv”运行 Python shell:
导入网站
site.getsitepackages()
Traceback(最近一次通话最后一次):
文件“”,第 1 行,在
AttributeError: 'module' 对象没有属性 'getsitepackages'
我在 Ubuntu 上运行“Python 2.7.3(默认,2012 年 8 月 1 日,05:14:39)”和“Linux2 上的 [GCC 4.6.3]”。我可能可以用 try-except 块拼凑一些东西,但似乎应该有一些变量集 / 由 distutils / setuptools 返回。 (我不知道使用哪个分支,只要它有效。)
谢谢。
【问题讨论】:
-
一种方法是到
import <yourpackage>并从<yourpackage>.__file__中删除包名称。不过我敢肯定还有更好的方法。 -
我可能会尝试将其作为一种解决方法,但我希望得到一些不会让人感觉像拼凑的东西。在相关说明中, setuptools.setup() 返回一个对象,但它似乎没有描述它所做的属性。 build/、dist/ 和 *.egg-info/ 目录是似乎适合此信息的附加位置......但他们没有。
-
在 distutils 的源代码中寻找一些有趣的项目:distutils.command.install.INSTALL_SCHEMES distutils.command.install.install.user_options distutils.command.install.install.sub_commands 看起来像他们有相关信息/功能,但我还不知道如何利用它们......尤其是在 setup.py 中
标签: python path installation setup.py