【问题标题】:Edit package installed by pip编辑 pip 安装的包
【发布时间】:2016-06-07 00:29:43
【问题描述】:

我正在尝试编辑我通过 pip 安装的名为 py_mysql2pgsql 的包(将我的 db 从 mysql 转换为 postgre 时出现错误,就像 this 一样。

但是,当我到达文件夹 /user/local/lib/python2.7/dist-packages/py_mysql2pgsql-0.1.5.egg-info 时,我找不到包的源代码。我只找到 PKG-INFO 和文本文件。

我怎样才能找到一个包(或者特别是这个包)的实际源代码?

谢谢

【问题讨论】:

  • 我相信 pip 在安装后会删除它:stackoverflow.com/questions/10617198/…
  • 嗯,所以我需要编辑那个包的代码,因为有一个错误......你知道我该怎么做吗?\
  • 我想我误解了你。您可以使用pip show py_mysql2pgsql 找到 pip 安装包的位置

标签: python pip


【解决方案1】:

TL;DR:

就地修改是危险的。修改源代码并然后从修改后的版本安装它。

详情

pip 是一个管理软件包安装的工具。您不应修改包安装期间创建的文件。充其量,这样做意味着 pip 将相信安装了特定版本的软件包,而实际上它没有安装。这不会与升级功能很好地交互。我怀疑 pip 只会覆盖您的自定义设置,永远丢弃它们,但我尚未确认。另一种可能性是它检查文件是否已更改,如果是则抛出错误。 (我认为这不太可能。)它还会误导系统的其他用户。他们看到你安装了一个包,但实际上你并没有指明那个版本;你有一个定制的版本。如果他们尝试将未修改的版本安装在其他地方,或者他们期望安装的版本具有某些特定行为,这可能会导致混淆。

如果您想修改源代码,正确的做法是修改源代码,然后构建一个新的自定义包或直接从源代码安装。 py-mysql2pgsql 提供执行源代码安装的说明:

> git clone git://github.com/philipsoutham/py-mysql2pgsql.git
> cd py-mysql2pgsql
> python setup.py install

您可以克隆源、修改它,然后在不使用 pip 的情况下安装。如果您需要在内部重新分发它,您也可以构建自己的自定义版本的包。这个项目使用 setuptools 来构建它的包,所以你只需要熟悉 setuptools 就可以使用他们的setup.py 文件。确保以这种方式安装它不会在 pip 的包列表中创建任何误导性条目。如果是这样,请找到确保条目更清晰的方法或找到替代安装方法。

由于您在软件中发现了一个错误,我还强烈建议您在 Github 上分叉它,并在修复后提交一个拉取请求。如果这样做,您只需将存储库 URL 更改为您的 fork 即可使用上述安装说明。如果你不分叉它,至少提交一个问题并描述修复它的更改。

替代方案:

  • 您可以将所有源代码复制到您的项目中,在那里对其进行修改,然后将修改后的版本与您的其余代码一起分发。 (如果您这样做,请确保您没有违反许可。)
  • 您也许可以在运行时解决您的问题。如果您团队中的其他人可能没有预料到行为的变化,那么对模块进行猴子修补有点冒险,但可以对模块的行为进行全局修改。您还可以创建一些额外的代码来包装错误代码:它可以接收输入、调用错误代码并防止或处理错误(例如,修改输入以使其工作或捕获异常和处理等)。

【讨论】:

    【解决方案2】:

    只需打印出模块的.__file__ 属性:

    >>> import numpy
    >>> numpy.__file__
    '/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/numpy/__init__.py'
    

    显然路径和特定包对你来说会有所不同,但这是在 python 中追踪任何模块的源文件的非常简单的方法。

    【讨论】:

      【解决方案3】:

      py_mysql2pgsql 包托管在 PyPI 上:https://pypi.python.org/pypi/py-mysql2pgsql

      如果您想要该特定版本的代码,只需从 PyPI (py-mysql2pgsql-0.1.5.tar.gz) 下载源代码压缩包

      开发托管在 GitHub 上:https://github.com/philipsoutham/py-mysql2pgsql

      【讨论】:

        猜你喜欢
        • 2021-07-11
        • 2018-04-01
        • 2013-06-25
        • 1970-01-01
        • 2019-02-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多