编辑由pip安装的包

时间:2016-06-07 00:29:44

标签: python pip

我试图编辑我通过pip安装的软件包,名为py_mysql2pgsql(将我的数据库从mysql转换为postgre时出错,就像this一样。

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

如何找到包(或特别是此包)的实际源代码?

由于

3 个答案:

答案 0 :(得分:6)

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即可使用上述安装说明。如果你不分叉,至少提出问题并描述修复它的更改。

备选方案:

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

答案 1 :(得分:3)

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

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

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

答案 2 :(得分:0)

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

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

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