编辑由pip安装的包

2024-04-26 07:37:55 发布

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

我正在尝试编辑一个通过pip安装的包,名为py_mysql2pgsql(我在将数据库从mysql转换为postgre时出错,就像this

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

如何找到包(尤其是此包)的实际源代码?

谢谢


Tags: pippy文件夹数据库编辑源代码libpackages
3条回答

TL;博士:

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

细节

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的包列表中创建任何误导性条目。如果是这样,要么找到一种方法来确保条目更加清晰,要么找到另一种安装方法。

既然您发现了软件中的一个bug,我强烈建议您在Github上分叉它,并在修复后提交一个pull请求。如果这样做了,只需将存储库URL更改为fork,就可以使用上述安装说明。如果不分叉,至少要提交一个问题并描述修复它的更改。

备选方案:

  • 您可以将所有源代码复制到项目中,在其中进行修改,然后将修改后的版本与其余代码一起分发。(如果违反了许可证,请确保您没有违反。)
  • 你也许可以在运行时解决你的问题。如果团队中的其他人可能不希望行为发生变化,则对模块进行猴子修补有点风险,但可以对模块的行为进行全局修改。您还可以创建一些附加代码来包装错误代码:它可以接受输入,调用错误代码,或者防止或处理错误(例如,修改输入使其工作,或者捕获异常并处理异常,等等)。

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

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

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

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

相关问题 更多 >