6

昨天,我编辑了bin/activate我的 virtualenv 的脚本,以便它设置PYTHONPATH环境变量以包含一些外部包的开发版本。我不得不这样做,因为setup.py包使用distutils并且不支持develop命令 à la setuptoolsPYTHONPATH就在终端中使用 Python 解释器而言,设置工作正常。

然而,刚才我在 PyCharm 中打开项目设置,发现 PyCharm 不知道有问题的外部包——PyCharm 既没有列出外部包,也没有列出它的路径。自然,这是因为 PyCharm 不(也不能可靠地)解析或获取bin/activate脚本。我可以在 PyCharm 项目设置中手动添加路径,但这意味着我必须重复自己(一次在PyCharm 项目设置中bin/activate,然后再次在 PyCharm 项目设置中)。那不是干的,那很糟糕。

在 中创建site-packages指向外部包的符号链接几乎是完美的。这样,至少 PyCharm 的源代码编辑器可以找到包,终端中的 Python 解释器也可以。但是,不知何故 PyCharm 仍然没有在项目设置中列出该包,我不确定是否可以这样保留它。

那么我怎样才能以这样的方式将外部包添加到我的 virtualenv/project 中......</p>

  1. 我不必重复自己;还有……</li>
  2. Python 解释器和 PyCharm 都知道吗?
4

3 回答 3

2

即使一个包没有使用setuptools pipmonkeypatchessetup.py来强制它使用setuptools.

也许您可以删除该PYTHONPATHhack 和pip install -e /path/to/package.

于 2013-02-02T12:14:07.873 回答
-1

一种选择是动态添加路径:

try:
    import foo
except ImportError:
    sys.path.insert(0. "/path/to/your/package/directory")
    import foo

但这不是最好的解决方案,因为该代码很可能不会进入应用程序的最终版本。另一种选择(和更合适的恕我直言)是为包制作简单的 setup.py 文件,并将其部署在 virtualenv 中,使用 develop 参数或通过 pip 使用 -e 参数:

python setup.py develop 

或者:

pip install -e /path/to/your/package/directory

http://packages.python.org/distribute/setuptools.html#development-mode

于 2013-02-01T14:18:03.800 回答
-1

这是对 ndpu 答案的改进,无论真实文件在哪里,它都可以工作。

您可以取消引用符号链接,然后sys.path在导入本地导入之前设置。

import os.path
import sys

# Ensure this file is dereferenced if it is a symlink
if __name__ == '__main__' and os.path.islink(__file__):
    try:
        sys.path.remove(os.path.dirname(__file__))
    except ValueError:
        pass
    sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))

# local imports go here
于 2019-08-22T16:16:18.200 回答