conda我有一個在python 3.7.7(在 Linux 上)運行的環境中的項目。當我重新編譯相同版本的 python (3.7.7) 并將可執行文件放置/替換在同一位置時,我希望程序以相同的方式運行,但導入失敗。使用原始版本的 python:(condaenv) mypc:~/Proj$ /home/me/.conda/envs/condaenv/bin/python3.7.bakPython 3.7.7 (default, Mar 26 2020, 15:48:22) [GCC 7.3.0] :: Anaconda, Inc. on linuxType "help", "copyright", "credits" or "license" for more information.>>> import gym>>> quit()編譯后的版本:(condaenv) mypc:~/Proj$ /home/me/.conda/condaenv/proj/bin/python3.7Python 3.7.7 (default, Sep 24 2020, 16:28:06) [GCC 9.3.0] on linuxType "help", "copyright", "credits" or "license" for more information.>>> import gymTraceback (most recent call last): File "<stdin>", line 1, in <module>ModuleNotFoundError: No module named 'gym'>>> quit()環境變量應該與我從同一位置、同一終端上運行時相同,而不會在兩次調用之間更改它。由于第一次導入沒有任何問題,所以軟件包安裝得很好。系統導入sys在兩個版本中都可以正常工作,但我必須LD_LIBRARY_PATH在編譯版本之前導出,而“正常”版本則不然。但是在兩次調用之間保持LD_LIBRARY_PATH不變不會改變任何東西。第二次調用找不到匹配的包會發生什么情況?我缺少什么?
2 回答

慕村9548890
TA貢獻1884條經驗 獲得超4個贊
和標志可能--without-pymalloc
會導致錯誤。將 miniconda 中的二進制文件替換為使用編譯庫構建的二進制文件或阻止導入已編譯的庫,例如和。不使用任何標志(即)進行編譯不會導致這些錯誤。導入編譯庫時進行編譯也不會引發錯誤。--with-pydebug
./configure
python3.7
./configure --without-pymalloc
./configure --with-pydebug
math
numpy
./configure && make
./configure --with-valgrind
較舊的答案:
您可以嘗試使用conda-forge 使用的配置標志嗎?使用這些標志,我能夠python3.7
在 conda 環境中替換二進制文件,并且導入繼續工作。如果我使用 OP 的標志(即--without-pymalloc --with-pydebug --with-valgrind
),則導入編譯的庫不起作用(例如 math、numpy)。
curl?-L?https://www.python.org/ftp/python/3.7.7/Python-3.7.7.tar.xz?|?tar?xJ cd?Python-3.7.7./configure?\ ????--prefix=/tmp/python3.7?\ ????--enable-ipv6?\ ????--with-ensurepip=no?\ ????--with-computed-gotos?\ ????--with-system-ffi?\ ????--enable-loadable-sqlite-extensions?\ ????--with-lto?\ ????--enable-optimizations?\ ????--with-valgrind make?-j
該解決方案涉及這些標志之一 - 也許--with-lto
或--enable-optimizations
。

慕森王
TA貢獻1777條經驗 獲得超3個贊
你在哪里編譯了新的Python?缺少 lib 可能librt.so.1
是錯誤消息的罪魁禍首。是否有機會安裝該librt
軟件包(取決于您的 Linux 風格)并重新編譯 Python。
添加回答
舉報
0/150
提交
取消