【问题标题】:Use another site-packages directory by default for setup.py installsetup.py install 默认使用另一个站点包目录
【发布时间】:2018-03-18 12:08:13
【问题描述】:

我在应用程序中嵌入了 Python。当用户通过

安装包或模块时
{...}\myapp\python\python.exe setup.py install

软件包将安装在

{...}\myapp\python\lib\site-packages

有没有机会默认使用其他目录

【问题讨论】:

  • 顺便说一句,我尝试在没有 virtualenv 的情况下解决它
  • 你试过{...}\myapp\python\python.exe setup.py install --prefix={...}\myapp` ? You can also use pip: pip3 install --install-option="--prefix=/some/location/outside/myapp/" /path/to/folder/with_setup_py/`
  • 如果您添加更多上下文可能会有所帮助,但我认为简短的回答是这些目录内置于site.py,因此您必须修补您的python安装才能做到这一点。

标签: python installation setup.py cpython site-packages


【解决方案1】:

要做到这一点,您需要注意的事项很少。我做了一些研究,这就是我发现的:

此部分摘自Python's docs

build 命令运行后(无论是显式运行,还是 install 命令为你执行),install 命令的工作都比较简单:它所要做的就是复制 build/lib 下的所有内容(或 build /lib.plat) 到您选择的安装目录。

如果您不选择安装目录(即,如果您只运行 setup.py install),那么 install 命令会安装到第三方 Python 模块的标准位置。此位置因平台以及您构建/安装 Python 本身的方式而异。

大多数 Linux 发行版都包含 Python 作为系统的标准部分,因此在 Linux 上 prefix 和 exec-prefix 通常都是 /usr。如果您在 Linux(或任何类 Unix 系统)上自己构建 Python,则默认前缀和 exec-prefix 为 /usr/local。

prefixexec-prefix 代表 Python 安装到的目录,以及它在运行时找到其库的位置。

您有办法交替安装位置,直到某一点:您可以交替 base 目录,但不能交替 安装方案

Distutils install 命令旨在使将模块分发安装到备用位置变得简单而轻松。基本思想是您为安装提供一个基本目录,安装命令在该基本目录下选择一组目录(称为安装方案)来安装文件。详细信息因平台而异,因此请阅读以下适用于您的部分。

“家庭方案”背后的理念是您构建和维护一个个人的 Python 模块存储库。这个方案的名字来源于 Unix 上的“主”目录的概念,因为 Unix 用户让他们的主目录具有类似于 /usr/ 或 /usr/local/ 的布局并不罕见。任何人都可以使用此方案,无论他们安装的操作系统是什么。

python setup.py install --home=<dir>

--home 选项定义安装基目录。文件安装到安装库下如下目录:

modules home/lib/python
scripts home/bin
data    home
C headers   home/include/python/distname

然后您需要修改Python's search path 才能找到新位置。

您也可以使用 --prefix 选项来定义安装基础 python setup.py install --prefix=。阅读更多关于它的信息here


总而言之,你可以改变home目录,但是site-packages层次结构会在里面建立。

【讨论】:

  • 非常感谢您的详细回答,这对您有很大帮助!我仍然会尝试寻找另一种解决方案,但在最坏的情况下,我必须接受这一点
  • 很难想象你会得到比这更彻底的答案。您能具体说明您认为其中缺少什么吗?
  • @HelloWorld 正在使用virtualenv 选项?
  • @charlesreid:似乎我的评论不清楚。对于“寻找另一种解决方案”,我的意思是找到一种完全不同的方法来从根本上规避问题,但答案是完美的,并且回答了我的问题
  • 我尽量避免virtualenv依赖,但我会尝试一下
【解决方案2】:

要添加新的站点包目录,请将新目录路径添加到路径配置文件中。

路径配置文件将允许您添加额外的站点包目录。如果您不想要现有的站点包目录,可以将其从 PYTHON_PATH 中删除。

echo "new_site-package_directory" > your_site_packages_path/usrlocal.pth

【讨论】:

  • 非常感谢!但不幸的是,它并没有取代旧的 site-packages 目录
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-05-27
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-07
  • 1970-01-01
相关资源
最近更新 更多