标签: pythonpath

将Python源代码拆分到单独的目录中?

以下是我的公司“foo.com”使用的一些各种 Python 包:

com.foo.bar.web
com.foo.bar.lib
com.foo.zig.web
com.foo.zig.lib
com.foo.zig.lib.lib1
com.foo.zig.lib.lib2
Run Code Online (Sandbox Code Playgroud)

这是将源存储在磁盘上的传统方法:

pysrc/
  com/
    foo/
      bar/
        web/
        lib/
      zig/
        web/
        lib/
          lib1/
          lib2/

PYTHONPATH=pysrc
Run Code Online (Sandbox Code Playgroud)

但出于组织目的(不同的团队、不同的版本控制等),我们希望将它们存储如下:

bar/
  pysrc/
    com/
      foo/
        bar/
          web/
          lib/
zig/
  pysrc/
    com/
      foo/
        zig/
          web/
          lib/
            lib1/
            lib2/

PYTHONPATH=bar/pysrc:zig/pysrc
Run Code Online (Sandbox Code Playgroud)

问题是:

第二种组织方法有什么问题吗?

例如,如果我们import com.foo,Python 会在哪里寻找__init__.py

符号链接这些目录有意义吗?例如:

pysrc/
  com/
    foo/
      bar/ -> symlink to /bar/pysrc/com/foo/
      zig/ -> symlink to /zig/pysrc/com/foo/
Run Code Online (Sandbox Code Playgroud)

欢迎任何一般代码组织建议。

python import project-organization pythonpath

6
推荐指数
1
解决办法
2994
查看次数

为什么virtualenv从我的shell继承$ PYTHONPATH?

所以我在Ubuntu 14.04机器上将我的所有工具从python2迁移到python3.4.到目前为止,我已经完成了以下工作:

  1. 在我的zshrc中为我的用户使用python到python3
  2. 在系统本身上安装了pip3(但我只是将virtualenvs用于所有内容,所以我不会真正使用它)
  3. 改变了我的virtualenvwrapper"make"别名mkvirtualenv --python=/usr/bin/python3('workon'在下面被调用为'v')

现在好奇,你可以清楚地看到它,从virtualenv激活的环境运行python3仍然继承我的$ PYTHONPATH,它仍然为我所有的python2路径设置.这在我的virtualenv中安装/运行程序时会造成严重破坏,因为python3路径显示在旧的python2路径之后,因此python2模块首先在我的程序中导入.在启动virtualenv之前将我的$ PYTHONPATH取消为''修复此问题并且我的程序按预期启动.但我的问题是:

  1. 在virtualenvs中这个$ PYTHONPATH的继承是正常的吗?这不是打败了整个目的吗?
  2. 当python已经在内部处理它自己的路径时,为什么将$ PYTHONPATH设置为shell中的env-var?
  3. 我正确使用$ PYTHONPATH吗?我应该只在我的'zshrc'中设置它以仅列出我的个人添加物($ HOME/dev)而不是冗余的'/ usr/local/lib /'位置?
  4. 在调用它们之前,我可以非常轻松地导出备用python3路径以供我的virtualenvs使用,并在完成后重置它们,但这是解决此问题的最佳方法吗?
    ? echo $PYTHONPATH
    /usr/local/lib/python2.7/site-packages:/usr/local/lib/python2.7/dist-packages:/usr/lib/python2.7/dist-packages:/home/brian/dev

    brian@zeus:~/.virtualenvs
    ? python2
    Python 2.7.6 (default, Mar 22 2014, 22:59:56)
    [GCC 4.8.2] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import sys, pprint
    >>> pprint.pprint(sys.path)
    ['',
     '/usr/local/lib/python2.7/dist-packages/pudb-2013.3.4-py2.7.egg',
     '/usr/local/lib/python2.7/dist-packages/Pygments-1.6-py2.7.egg',
     '/usr/local/lib/python2.7/dist-packages/urwid-1.1.1-py2.7-linux-x86_64.egg',
     '/usr/local/lib/python2.7/dist-packages/pythoscope-0.4.3-py2.7.egg',
     '/usr/local/lib/python2.7/site-packages',
     '/usr/local/lib/python2.7/dist-packages',
     '/usr/lib/python2.7/dist-packages',
     '/home/brian/dev',
     '/usr/lib/python2.7',
     '/usr/lib/python2.7/plat-x86_64-linux-gnu',
     '/usr/lib/python2.7/lib-tk',
     '/usr/lib/python2.7/lib-old',
     '/usr/lib/python2.7/lib-dynload',
     '/usr/lib/python2.7/dist-packages/PILcompat',
     '/usr/lib/python2.7/dist-packages/gst-0.10',
     '/usr/lib/python2.7/dist-packages/gtk-2.0',
     '/usr/lib/pymodules/python2.7',
     '/usr/lib/python2.7/dist-packages/ubuntu-sso-client',
     '/usr/lib/python2.7/dist-packages/ubuntuone-client',
     '/usr/lib/python2.7/dist-packages/ubuntuone-storage-protocol',
     '/usr/lib/python2.7/dist-packages/wx-2.8-gtk2-unicode']
    >>>

    brian@zeus:~/.virtualenvs
    ? v py3venv
    (py3venv)
    brian@zeus:~/.virtualenvs …

python virtualenv zshrc pythonpath virtualenvwrapper

6
推荐指数
1
解决办法
5745
查看次数

如何撤消 sys.path.append(pathToModule)

我一直在尝试修复我的cpu上的python路径,我最初只是想改变我的.bash_profile,但这不起作用,所以我使用

import sys
sys.pat.append(path/To/Module)
Run Code Online (Sandbox Code Playgroud)

现在当我运行我的脚本时,我收到此错误消息

我该如何解决此问题或撤消该问题sys.path.append(path/To/Module)

另外,是否可以导出 python 路径中的多个目录,如果可以,我该怎么做?

python import pythonpath sys.path python-2.7

6
推荐指数
1
解决办法
9236
查看次数

哪个 python 与 PYTHONPATH

如果我输入which python我得到:/home/USER/anaconda3/bin/python 如果我输入echo $PYTHONPATH我得到:/home/USER/terrain_planning/devel/lib/python2.7/dist-packages:/opt/ros/melodic/lib/python2.7/dist-packages

应该不一样吧?设置它不是更好:usr/lib/python/ 我该怎么做?将它添加到 PYTHONPATH 或将 PYTHONPATH 设置为那个?但是怎么设置which python呢?

python linux environment pythonpath python-requests

6
推荐指数
1
解决办法
1007
查看次数

在 VS Code 中添加到 PYTHONPATH

我正在尝试将 src 文件夹添加到我的PYTHONPATHiE 中,做与Mark directory as sources root在 PyCharm 中相同的事情。

我查看了Visual Studio Code的解决方案- 如何向 python 路径添加多个路径?但是那里显示的解决方案对我不起作用。

我已经设置了我的最小示例,如下面的屏幕截图所示:

在此处输入图片说明

我的理解是拥有一个 .env 文件PYTHONPATH="./src;${PYTHONPATH}"会将 src 文件添加到路径中。

然而,当运行代码运行器或运行python change_pyhton_path.pysrc 不是 PYTHONPATH 的一部分并且从 src 直接导入失败时。

我确实有设置"python.envFile": "${workspaceFolder}/.env"

另一方面,在 pyCharm 中,点击Mark directory as sourcesrc后一切正常。 在此处输入图片说明

感谢您的帮助!

python pythonpath visual-studio-code

6
推荐指数
1
解决办法
1054
查看次数

Macbook M1 上的 VS Code 上的 python.pythonPath 提示“未知配置设置”

我刚刚开始接触编程,需要一些帮助。当我在 Mac 上打开 VScode 并且我的 python 解释器版本不会显示在状态栏中时,我的问题就开始了。我问过类似的问题: Python Interpreter Version not shown in status bar of VS code on Mac

我更深入地研究了它(https://www.youtube.com/watch?v=veJvQ88ULOM&t=193s),发现我可能需要给它一个路径,所以我正在寻找如何通过转到 code/preference/ 来设置它settings/ 然后单击打开设置 JSON(右上角图标)以将 python.pythonPath: "/opt/homebrew/opt/python@3.9/bin/python3.9" 放入大括号中以使其工作,但我的 VS 代码获胜甚至不认识 python.pythonPath。

任何帮助深表感谢!

macos pythonpath visual-studio-code pythoninterpreter

6
推荐指数
1
解决办法
1744
查看次数

Mingw64安装添加了Pyhton版本!如何删除 mingw64 Python 并保留我的?

我安装了Python 3.8.10 64位(win10)。我将它与 VSC 一起使用。另外对于 c/c++ 我已经安装了 mingw64。Mingw64 安装了一个 python 版本,不知道为什么和为什么,但它已经出现了问题。因为 mingw64 安装是系统范围的安装,并且 Path 是系统变量,所以每次我尝试从控制台运行某些内容时,都会使用 mingw64 python 安装。所以我的 python 安装是本地的、用户范围的安装。因此,每次都会首选系统范围安装,除非我每次都指定路径。

最烦人的问题是

PS C:\src\python-ivi-master> python .\setup.py install
Traceback (most recent call last):
  File "C:\src\python-ivi-master\setup.py", line 11, in <module>
    from setuptools.command.test import test as TestCommand
ModuleNotFoundError: No module named 'setuptools'
Run Code Online (Sandbox Code Playgroud)

它找不到模块,例如 setuptools。如果我列出已安装的软件包,则该模块就在那里。

Package           Version
----------------- -------
easy-scpi         0.1.2
modbus            3.2
numpy             1.22.3
pandas            1.4.1
pip               22.0.4
pymodbus          2.5.3
pyserial          3.5
python-dateutil   2.8.2
python-ivi        0.14.9
pytz              2021.3
PyVISA            1.11.3
scpi              2.4.0
setuptools        60.10.0 …
Run Code Online (Sandbox Code Playgroud)

python setuptools pythonpath ming windows-10

6
推荐指数
1
解决办法
841
查看次数

VS Code 在工作区中找不到自己的 python 模块

我正在使用 VS Code 开发一个 python 包,其在 VS Code 中打开的工作区文件夹的布局如下

workspace
| + tests
| | - test1.py
| | + other_tests
| | | - test2.py 
| + mymodule
| | ...
Run Code Online (Sandbox Code Playgroud)

我想要的是打电话进来test1.py并带test2.py包裹mymodule

import mymodule
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我总是收到错误no module named 'mymodule'。我知道我可以通过将以下内容插入到所有测试文件来加载路径:

import sys
sys.path.append('<path_to>/workspace/')
Run Code Online (Sandbox Code Playgroud)

然后mymodule就可以正确加载了。(我知道我可以使用pathlib.Path(__file__).parent[n]一些n来获得<path_to>.

但如果你在不同的文件夹中有很多测试文件,这个过程真的很麻烦......而且它很丑陋。

有什么方法可以告诉 VS Code 始终将 包含workspace在路径中吗?

我尝试了一个.env文件

PYTHONPATH=<path_to>/workspace/
Run Code Online (Sandbox Code Playgroud)

我还尝试将以下内容添加到launch.json

"env": { "PYTHONPATH": "${workspaceFolder}" }
Run Code Online (Sandbox Code Playgroud)

两者都没有达到目的。(我也不确定这是否PYTHONPATH …

python pythonpath visual-studio-code

6
推荐指数
1
解决办法
7931
查看次数

pythonpath应该有特定于python2和python3的目录吗?

我每天都在使用python 2和python 3.我应该添加特定于python版本的PYTHONPATH路径,如下所示,特定于python 2?

/usr/local/lib/python2.7/dist-packages
Run Code Online (Sandbox Code Playgroud)

如果答案是肯定的,那么python 3会不会使用这些模块?

如果答案是否定的,那么如果不是PYTHONPATH,我应该在哪里添加上述路径?

python python-2.x pythonpath

5
推荐指数
1
解决办法
977
查看次数

使用py.test进行单元测试时,"RuntimeError:在应用程序上下文之外工作"

我正在尝试迁移到py.test以便于使用和自动发现测试.当我使用unittest运行测试时,测试工作正常.当我在py.test下运行测试时,我得到了RuntimeError: working outside of application context.

这是测试代码(test_app.py):

import unittest

from app import app

class TestAPILocally(unittest.TestCase):
    def setUp(self):
        self.client = app.test_client()

    def testRoot(self):
        retval = self.client.get('/').data
        self.assertTrue('v1' in retval)

if __name__ == '__main__':
    unittest.main()
Run Code Online (Sandbox Code Playgroud)

这是我正在测试的精简文件(app.py):

from flask import Flask
from flask.ext.restful import Api, Resource

class APIListAPI(Resource):
    def get(self):
        return ['v1']

app = Flask(__name__)
api = Api(app)
api.add_resource(APIListAPI, '/')
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,这与烧瓶站点上的文档非常相似:测试骨架,实际上,当我使用unittest运行它时,它成功:

$ python tmp1/test_app.py 
.
----------------------------------------------------------------------
Ran 1 test in 0.115s

OK
$ 
Run Code Online (Sandbox Code Playgroud)

但是,当我用py.test测试时,它失败了:

$ ./py.test tmp1/test_app.py
=================== test …
Run Code Online (Sandbox Code Playgroud)

python unit-testing pythonpath pytest flask

5
推荐指数
3
解决办法
2万
查看次数