<p>不,对于一个'--relocatable'不更新'virtualenv/bin/activate'脚本。是的,您可以按照zeekay的建议重新运行virtual env安装程序来解决这个问题,但是stills无法导入任何放置在virtualenv/src中的“pip-e git…”安装,因此您必须手动重新运行这些pip安装程序。</p>
<p>作为一名开发人员,我已经积累了经验,现在我避免了附加的依赖层和抽象层,这些层往往是失败的点。</p>
<p>因此,现在我不使用pip editable(-e)进行安装,如果需要,可以手动将存储库克隆到“project/src/”而不是“project/virtualenv/src”,并在启动项目之前加载下面的<code>auto_prep_pythonpath.py</code>脚本(我在<code>django.wsgi</code>脚本中引用它)。</p>
<p>顺便说一下,我在“project/src”中添加了“定制”到任何被修改/黑客攻击的包中,这样我就不必担心向后兼容性了,我跟踪所有受代码控制的源代码,因为在线存储库可以而且会阻止你。</p>
<p>希望这有帮助。</p>
<pre><code>"""
Prepares python path to include additional project/src/<APP> in PYTHONPATH - This file gets automatically loaded by projects __init__.py
This script lives in 'project/src/django-project/auto_prep_pythonpath.py', modify
'SOURCE_ROOT' if you place it somewhere else.
"""
import logging
import os
import sys
SOURCE_ROOT = os.path.dirname(os.path.abspath(__file__)).replace('\\','/') # the replacements are when on windows
SOURCE_ROOT = os.path.join(SOURCE_ROOT, '../').replace('\\','/')
SOURCE_ROOT = os.path.normpath(SOURCE_ROOT)
logger = logging.getLogger(__name__)
logger.info("Adding packages in 'src/*' required by project to PYTHONPATH.")
dirlist_arr = os.listdir(SOURCE_ROOT)
while dirlist_arr:
item_path = os.path.join(SOURCE_ROOT, dirlist_arr.pop()).replace('\\','/') # replace dashes is for win based file system
if os.path.isdir(item_path):
if not item_path in sys.path:
sys.path.insert(0, item_path) # we use insert to take precedence over any global paths - minimizes import conflict surprises
logger.debug("Path '%s' added." % item_path)
</code></pre>