代码之家  ›  专栏  ›  技术社区  ›  Casebash

python:引用另一个项目

  •  4
  • Casebash  · 技术社区  · 15 年前

    我希望能够从命令行运行我的python项目。我正在引用其他项目,所以我需要能够在其他文件夹中运行模块。

    实现这一点的一种方法是修改pythonpath环境变量,但我认为这是一种滥用。另一种方法是将我想要的所有文件复制到一个目录中,然后运行python。有更好的方法吗?

    注意:我实际上正在Eclipse中编程,但是我希望能够远程运行该程序。

    类似问题:

    5 回复  |  直到 15 年前
        1
  •  10
  •   mavnn    15 年前

    如果导入sys,它将包含pythonpath中作为sys.path的目录列表。

    将目录添加到此列表(sys.path.append(“my/path”))允许您正常从当前模块中的这些位置导入,而无需更改系统的全局设置。

        2
  •  5
  •   Lennart Regebro    15 年前

    看看这些工具

    1. virtualenv,设置一个虚拟python,您可以在其中安装模块,而无需全局获取它们。 http://pypi.python.org/pypi/virtualenv

    2. 设置工具,允许您为模块指定(并自动安装)依赖项。 http://pypi.python.org/pypi/setuptools (如果安装工具有问题,请查看Distribute,一个维护的分叉。 http://pypi.python.org/pypi/distribute )

    3. buildout,它允许您部署一个完整的应用程序环境,包括第三方软件,如mysql或其他任何软件。 http://pypi.python.org/pypi/zc.buildout/

        3
  •  1
  •   Peter    15 年前

    首先,我要确保我要包含的模块没有在全局安装。然后在includee目录中添加一个symlink:

    # With pwd == module to which I want to add functionality.
    ln -s /path/to/some_other_module_to_include .
    

    然后我可以做一个标准导入。这允许多个版本等。它不需要更改任何全局设置,如果您在不同的机器上工作,也不需要更改程序代码(只需更改symlink)。

        4
  •  0
  •   Community Nick Dandoulakis    7 年前

    如果您所说的“运行模块”是指导入它们,那么您可能会感兴趣 this 我刚才问的问题。

        5
  •  0
  •   Casebash    15 年前

    我刚刚意识到我以前确实解决了这个问题。这里是我使用的方法——比Mavnn复杂得多,但我也解决了从Python3.0运行python2.x程序的问题。

    import os
    import subprocess
    env=os.environ.copy()
    env['PYTHONPATH']=my_libraries
    kwargs={"stdin":subprocess.PIPE, "env":env}
    subprocess.Popen(["python","-u",program_path],**kwargs)