我在想像
python3 my_script.py --pythonpath /path/to/some/necessary/modules
有这样的吗?我知道(我认为)PycharmPYTHONPATH在您使用它执行脚本时会临时修改;Pycharm 是如何做到的?
我想这样做的原因是我有一些代码通常需要在我自己的机器上运行(这很好,因为我使用 Pycharm 来运行它)但有时需要在远程服务器上运行(在命令行上),并且它不起作用,因为远程服务器没有PYTHONPATHPycharm 临时自动添加的s。我不想这样做,export PYTHONPATH=[...]因为经常更改它很麻烦(并且假设它确实需要经常更改)。
我的.pth配置文件中列出的目录未出现在sys.path中.
配置文件的内容,命名为some_code_dirs.pth:
/home/project
Run Code Online (Sandbox Code Playgroud)
文件路径:
/usr/lib/python2.6/site-packages/some_code_dirs.pth
/usr/lib/python2.6/some_code_dirs.pth
Run Code Online (Sandbox Code Playgroud)
检查python解释器中的sys变量:
>>> print sys.prefix
'/usr'
>>> print sys.exec_prefix
'/usr'
Run Code Online (Sandbox Code Playgroud)
所有这些似乎都是Python 文档中的要求,但sys.path不包含/ home/project目录.
请注意,解释器会在以下情况后添加目录:
>>> site.addsitedir('/usr/lib/python2.6/site-packages')
Run Code Online (Sandbox Code Playgroud)
我在这里错过了什么?
以下是我的公司“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)
欢迎任何一般代码组织建议。
我有4个目录:
/home/user/test1
/home/user/test2
/home/user/test3
/home/user/test4
Run Code Online (Sandbox Code Playgroud)
我有另一个测试目录
/home/user/testing
Run Code Online (Sandbox Code Playgroud)
有文件testall.py
我怎么能将PATT附加到test,test1到test4到PYTHONPATH,以便我可以访问test1到4下的文件.
顺便说一句,test1到4有python文件所在的多个目录.
我试过了:
import sys
import os
PROJECT_ROOT = os.path.dirname(__file__)
sys.path.insert(0,os.path.join(PROJECT_ROOT,"test1"))
sys.path.insert(1,os.path.join(PROJECT_ROOT,"test2"))
sys.path.insert(2,os.path.join(PROJECT_ROOT,"test3"))
sys.path.insert(3,os.path.join(PROJECT_ROOT,"test4"))
Run Code Online (Sandbox Code Playgroud)
似乎没有用
也:
import sys
sys.path.append('/home/user/test1','/home/user/test2','/home/user/test3','/home/kahmed/test4')
from test1.common.api import GenericAPI
Run Code Online (Sandbox Code Playgroud)
不工作.
基本上:从test1.common.api导入GenericAPI应该工作
所以我在Ubuntu 14.04机器上将我的所有工具从python2迁移到python3.4.到目前为止,我已经完成了以下工作:
mkvirtualenv --python=/usr/bin/python3('workon'在下面被调用为'v')现在好奇,你可以清楚地看到它,从virtualenv激活的环境运行python3仍然继承我的$ PYTHONPATH,它仍然为我所有的python2路径设置.这在我的virtualenv中安装/运行程序时会造成严重破坏,因为python3路径显示在旧的python2路径之后,因此python2模块首先在我的程序中导入.在启动virtualenv之前将我的$ PYTHONPATH取消为''修复此问题并且我的程序按预期启动.但我的问题是:
? 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 … 我一直在尝试修复我的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 路径中的多个目录,如果可以,我该怎么做?
我正在尝试将 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后一切正常。

感谢您的帮助!
我刚刚开始接触编程,需要一些帮助。当我在 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。
任何帮助深表感谢!
我安装了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) 我正在使用 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 …
pythonpath ×10
python ×9
import ×2
macos ×1
ming ×1
path ×1
pycharm ×1
python-2.7 ×1
setuptools ×1
sys.path ×1
virtualenv ×1
windows-10 ×1
zshrc ×1