<h2>TL;博士:</h2>
<p>就地修改是危险的。修改源代码,然后从修改后的版本安装它。</p>
<h2>细节</h2>
<p>pip是一个管理软件包安装的工具。不应修改包安装期间创建的文件。充其量,这样做意味着pip会相信某个特定版本的软件包是在没有安装的情况下安装的,这不会与升级功能很好地交互。我怀疑pip会覆盖你的定制,永远丢弃它们,但我还没有确认。另一种可能性是,它检查文件是否已更改,如果已更改,则抛出错误。(我认为不太可能)这也误导了系统的其他用户。他们看到您已经安装了一个包,但实际上并没有指定该版本;您有一个自定义版本。如果他们试图将未修改的版本安装到其他地方,或者希望从安装的版本中获得某些特定行为,这可能会导致混淆。</p>
<p>如果你想修改源代码,正确的做法是修改源代码,要么构建一个新的自定义包,要么直接从源安装。<a href="https://github.com/philipsoutham/py-mysql2pgsql" rel="noreferrer">py-mysql2pgsql</a>提供了执行源安装的说明:</p>
<pre><code>> git clone git://github.com/philipsoutham/py-mysql2pgsql.git
> cd py-mysql2pgsql
> python setup.py install
</code></pre>
<p>您可以克隆源代码,对其进行修改,然后在不使用pip的情况下进行安装。如果需要在内部重新分发包,也可以构建自己的自定义版本。这个项目使用setuptools来构建它的包,因此您只需要熟悉setuptools就可以使用它们的<code>setup.py</code>文件。确保这样安装不会在pip的包列表中创建任何误导性条目。如果是这样,要么找到一种方法来确保条目更加清晰,要么找到另一种安装方法。</p>
<p>既然您发现了软件中的一个bug,我强烈建议您在Github上分叉它,并在修复后提交一个pull请求。如果这样做了,只需将存储库URL更改为fork,就可以使用上述安装说明。如果不分叉,至少要提交一个问题并描述修复它的更改。</p>
<p>备选方案:</p>
<ul>
<li>您可以将所有源代码复制到项目中,在其中进行修改,然后将修改后的版本与其余代码一起分发。(如果违反了许可证,请确保您没有违反。)</li>
<li>你也许可以在运行时解决你的问题。如果团队中的其他人可能不希望行为发生变化,则对模块进行猴子修补有点风险,但可以对模块的行为进行全局修改。您还可以创建一些附加代码来包装错误代码:它可以接受输入,调用错误代码,或者防止或处理错误(例如,修改输入使其工作,或者捕获异常并处理异常,等等)。</li>
</ul>